예제 #1
0
파일: pcrecv.c 프로젝트: ya-mouse/dos-utils
int sock_recv_used (const sock_type *s)
{
  const recv_data *r;
  const recv_buf  *p;

  int i, len;

  switch (_chk_socket(s))
  {
    case VALID_UDP:
         r = (const recv_data*) s->udp.rx_data;
         p = (const recv_buf*) r->recv_bufs;
         if (r->recv_sig != RECV_USED)
            return (-1);

         for (i = len = 0; i < r->recv_bufnum; i++, p++)
             if (p->buf_sig == RECV_USED)
                len += abs (p->buf_len);   /* -1 -> 1 */
         return (len);

#if !defined(USE_UDP_ONLY)
    case VALID_TCP:
         r = (const recv_data*) s->tcp.rx_data;
         if (r->recv_sig != RECV_USED)
            return (-1);
         return (s->tcp.rx_datalen);
#endif
  }
  return (0);
}
예제 #2
0
int sock_recv_used (udp_Socket *s)
{
  recv_data  *r;
  recv_buf   *p;

  int i, len;

  switch (_chk_socket((sock_type*)s))
  {
    case VALID_UDP:
         r = (recv_data*)s->rdata;
         p = (recv_buf*) r->recv_bufs;
         if (r->recv_sig != RECV_USED)
            return (-1);

         for (i = len = 0; i < r->recv_bufnum; i++, p++)
             if (p->buf_sig == RECV_USED)
                len += abs (p->buf_len);
         return (len);

#if !defined(USE_UDP_ONLY)
    case VALID_TCP:
         {
           tcp_Socket *t = (tcp_Socket*)s;

           r = (recv_data*) t->rdata;
           if (r->recv_sig != RECV_USED)
              return (-1);
           return (t->rdatalen);
         }
#endif
  }
  return (0);
}
예제 #3
0
파일: bsdname.c 프로젝트: basecq/q2dos
/**
 * Core-style: \n
 * Return 'watt_sockaddr' for peer in a UDP/TCP connection.
 */
int _getpeername (const sock_type *s, void *dest, int *len)
{
  struct watt_sockaddr temp;
  size_t ltemp;
  int    chk = _chk_socket (s);

  if (!s->tcp.hisaddr || !s->tcp.hisport ||
      (chk != VALID_UDP && chk != VALID_TCP))
  {
    if (len)
       *len = 0;
    return (-1);
  }

  memset (&temp, 0, sizeof(temp));
  temp.s_ip   = s->tcp.hisaddr;
  temp.s_port = s->tcp.hisport;
  temp.s_type = s->tcp.ip_type;

  /* how much do we move?
   */
  ltemp = (len ? *(size_t*)len : sizeof(struct watt_sockaddr));
  if (ltemp > sizeof (struct watt_sockaddr))
      ltemp = sizeof (struct watt_sockaddr);
  memcpy (dest, &temp, ltemp);

  if (len)
     *len = ltemp;
  return (0);
}