Ejemplo n.º 1
0
void
rel_recvpkt (rel_t *r, packet_t *pkt, size_t n)
{
  //fprintf(stderr, "\n******************receive!********************\n");
  if (!check_valid(pkt, n)) return;
  //fprintf(stderr, "\n******************pass check!********************\n");
  int i = 0;
  if (ntohs(pkt->len) == 8) {
    // sender side
    // receive ack 
    //fprintf(stderr, "\n******************Receive Ack ack:%d, LAR:%d!********************\n", ntohl(pkt->ackno), r->LAR);
    if (ntohl(pkt->ackno) > r->LAR) {
      for (i=r->LAR; i<ntohl(pkt->ackno); i++) {
        r->sendState[i% r->window_size] = 1; // got ack
      }
      r->LAR = ntohl(pkt->ackno) - 1;
      if (r->SEND_EOF) {
        // receive ack of eof
        r->EOF_ACKED = true;
      }
      rel_read(r);
    }
  } else if (ntohs(pkt->len) >= 12) {
    // receiver side
    if (recv_check(r, pkt)) {
      if (ntohl(pkt->seqno) == r->LSR+1) {
        // right seqno, output buffer and change LSR, LAS and recvState
        if (ntohs(pkt->len) == 12) {
          // receive EOF 
          r->RECV_EOF = true; 
        } 
        addPktToRWindow(r, pkt); // add to buffer first 
        rel_output(r);
      } else if (ntohl(pkt->seqno) <= r->LSR) {
        // old seqno, send current ack
        send_ack(r);
      } else {
        addPktToRWindow(r, pkt); // add to buffer
      }
    } else {
      send_ack(r);
    }
  }
}
Ejemplo n.º 2
0
void recvs2vector (char *snd, char *recvs, vector < string > &vec)
{
    vec.clear ();

    char buffer[TO_MAIL_ADDR_SIZE] = { 0 };
    int j = 0;
    char *p = recvs;

    for (unsigned int i = 0; i <= strlen (recvs); i++)
    {
        if ((char) p[i] == RCPT_TOK || i == strlen (recvs))
        {
            buffer[j] = '\0';

            if (buffer != NULL)
            {
                if (true == recv_check (buffer))
                {
                    if (0 != same_domain_check (snd, buffer))
                    {
                        if (buffer[0] != '\0')
                            vec.push_back (string (buffer));
                    }
                }
            }

            memset (&buffer, 0, TO_MAIL_ADDR_SIZE);
            j = 0;
        }
        else if (i < strlen (recvs))
        {
            buffer[j] = p[i];
            j++;
        }

    }
}