src/commom/pacote.c
int montaMensagemPeloPacote(char *b, pacote *p){
  unsigned short posicao = 0;
  // int cargaUtil = tamMaxMsg - sizeof(p->opcode) - sizeof(p->numBloco);
  uint16_t numBloco;
  
  // inicializa buffer
  memset(b, 0, tamMaxMsg);

  memcpy(b, &p->opcode, sizeof p->opcode);
  posicao += sizeof p->opcode;
  switch ((opCode)p->opcode){
    case REQ:
      strcpy(b + posicao, p->nomeArquivo);
      posicao += strlen(p->nomeArquivo);
      break;
    case ACK:
      numBloco = htons(p->numBloco);
      memcpy(b + posicao, &numBloco, sizeof numBloco);
      posicao += sizeof numBloco;
      break;
    case DADOS:
      numBloco = htons(p->numBloco);
      memcpy(b + posicao, &numBloco, sizeof numBloco);
      posicao += sizeof numBloco;
      memcpy(b + posicao, p->dados, p->cargaUtil);
      posicao += p->cargaUtil;
      break;
    case ERRO:
      memcpy(b + posicao, &p->codErro, sizeof p->codErro);
      posicao += sizeof p->codErro;
      strcpy(b + posicao, p->mensagemErro);
      posicao += strlen(p->nomeArquivo);
      break;
    case FIM:
      break;
    case INVALIDO:
      break;
  }
  //TODO: calcular e incluir CRC
  return posicao;
}
// cria buffer de pacote a partir dos dados da estrutura do pacote
cria buffer de pacote a partir dos dados da estrutura do pacote
cria buffer de pacote a partir dos dados da estrutura do pacote
int montaMensagemPeloPacote(char *b, pacote *p){
  unsigned short posicao = 0;
  uint16_t numBloco;
  memset(b, 0, tamMaxMsg);
  memcpy(b, &p->opcode, sizeof p->opcode);
  posicao += sizeof p->opcode;
  switch ((opCode)p->opcode){
    case REQ:
      strcpy(b + posicao, p->nomeArquivo);
      posicao += strlen(p->nomeArquivo);
      break;
    case ACK:
      numBloco = htons(p->numBloco);
      memcpy(b + posicao, &numBloco, sizeof numBloco);
      posicao += sizeof numBloco;
      break;
    case DADOS:
      numBloco = htons(p->numBloco);
      memcpy(b + posicao, &numBloco, sizeof numBloco);
      posicao += sizeof numBloco;
      memcpy(b + posicao, p->dados, p->cargaUtil);
      posicao += p->cargaUtil;
      break;
    case ERRO:
      memcpy(b + posicao, &p->codErro, sizeof p->codErro);
      posicao += sizeof p->codErro;
      strcpy(b + posicao, p->mensagemErro);
      posicao += strlen(p->nomeArquivo);
      break;
    case FIM:
      break;
    case INVALIDO:
      break;
  }
  return posicao;
}
int montaMensagemPeloPacote ( char * b , pacote * p ) { unsigned short posicao = 0 ; uint16_t numBloco ; memset ( b , 0 , tamMaxMsg ) ; memcpy ( b , & p -> opcode , sizeof p -> opcode ) ; posicao += sizeof p -> opcode ; switch ( ( opCode ) p -> opcode ) { case REQ : strcpy ( b + posicao , p -> nomeArquivo ) ; posicao += strlen ( p -> nomeArquivo ) ; break ; case ACK : numBloco = htons ( p -> numBloco ) ; memcpy ( b + posicao , & numBloco , sizeof numBloco ) ; posicao += sizeof numBloco ; break ; case DADOS : numBloco = htons ( p -> numBloco ) ; memcpy ( b + posicao , & numBloco , sizeof numBloco ) ; posicao += sizeof numBloco ; memcpy ( b + posicao , p -> dados , p -> cargaUtil ) ; posicao += p -> cargaUtil ; break ; case ERRO : memcpy ( b + posicao , & p -> codErro , sizeof p -> codErro ) ; posicao += sizeof p -> codErro ; strcpy ( b + posicao , p -> mensagemErro ) ; posicao += strlen ( p -> nomeArquivo ) ; break ; case FIM : break ; case INVALIDO : break ; } return posicao ; }
cria buffer de pacote a partir dos dados da estrutura do pacote
cria buffer de pacote a partir dos dados da estrutura do pacote
// int cargaUtil = tamMaxMsg - sizeof(p->opcode) - sizeof(p->numBloco); // inicializa buffer //TODO: calcular e incluir CRC