示例#1
0
sock_result_t socket_send_ex(sock_handle_t sd, const void* buffer, socklen_t len, uint32_t flags, system_tick_t timeout, void* reserved)
{
    sock_result_t result = SOCKET_INVALID;
    socket_t* socket = from_handle(sd);

    uint16_t bytes_sent = 0;

    if (is_open(socket)) {
        std::lock_guard<socket_t> lk(*socket);
        wiced_result_t wiced_result = WICED_TCPIP_INVALID_SOCKET;
        if (is_tcp(socket)) {
            wiced_tcp_send_flags_t wiced_flags = timeout == 0 ? WICED_TCP_SEND_FLAG_NONBLOCK : WICED_TCP_SEND_FLAG_NONE;
            bytes_sent = (uint16_t)len;
            wiced_result = wiced_tcp_send_buffer_ex(tcp(socket), buffer, &bytes_sent, wiced_flags, timeout);
        }
        else if (is_client(socket)) {
            tcp_server_client_t* server_client = client(socket);
            size_t written = 0;
            wiced_result = server_client->write(buffer, len, &written, flags, timeout);
            bytes_sent = (uint16_t)written;
        }
        if (!wiced_result)
            DEBUG("Write %d bytes to socket %d result=%d", (int)len, (int)sd, wiced_result);
        result = wiced_result ? as_sock_result(wiced_result) : bytes_sent;
    }
    return result;
}
示例#2
0
wiced_tcp_socket_t* as_wiced_tcp_socket(socket_t* socket)
{
    if (is_tcp(socket)) {
        return tcp(socket);
    }
    else if (is_client(socket)) {
        return socket->s.tcp_client->get_socket();
    }
    return NULL;
}
示例#3
0
	void mod_addr_version(const IP::Addr& addr)
	{
		switch (addr.version())
		{
		case IP::Addr::UNSPEC:
			break;
		case IP::Addr::V4:
			if (is_udp())
				type_ = UDPv4;
			else if (is_tcp())
				type_ = TCPv4;
			break;
		case IP::Addr::V6:
			if (is_udp())
				type_ = UDPv6;
			else if (is_tcp())
				type_ = TCPv6;
			break;
		}
	}
示例#4
0
sock_result_t socket_shutdown(sock_handle_t sd, int how)
{
    sock_result_t result = WICED_ERROR;
    socket_t* socket = from_handle(sd);
    if (socket && is_open(socket) && is_tcp(socket)) {
        std::lock_guard<socket_t> lk(*socket);
        result = wiced_tcp_close_shutdown(tcp(socket), (wiced_tcp_shutdown_flags_t)how);
        LOG_DEBUG(TRACE, "socket shutdown %x %x", sd, how);
    }
    return result;
}
示例#5
0
void ListenAllTcp( struct ServiceArray* service_array )
{
	// for each service
	int i;
	for (i = 0; i < service_array->size; ++i)
	{
		struct Service* service = &( service_array->services[i] );

		if( is_tcp( service ) )
			listen( service->socketfd, BACKLOG );
	}

}
void callback(unsigned char *user, const struct pcap_pkthdr *h, const unsigned char *bytes)
{
    int len;
    const unsigned char *buf;
    const unsigned char *cur;
    unsigned char url[1024];
    int url_len = 0;
    char data[1400];
    int is_req;
    int hdr_len;
    int ret;

    buf = bytes;
    len = h->caplen;
    cur = buf;

    if (!is_tcp(buf, len)){
        return;
    }

    cur += 54;
    len -= 54;//tcp hdr ip hdr

    is_req = is_http_request(cur, len);
    hdr_len = http_hdr_len(cur, len);

    switch (is_req){
    case 0:
        break;
    case 1:
        ret = get_url(url,&url_len, cur, hdr_len);
        if (ret == 0){
		logging(url,url_len);
	//printf("url_len:%d\n",url_len);
        }
        break;
    case 2:
        ret = get_url(url,&url_len, cur, hdr_len);
        if (ret == 0){
		logging(url,url_len);
        }
        //get_data(data, curl, len);
        break;
    default:
        break;
    }

    

}
示例#7
0
/**
 * Receives data from a socket.
 * @param sd
 * @param buffer
 * @param len
 * @param _timeout
 * @return The number of bytes read. -1 if the end of the stream is reached.
 */
sock_result_t socket_receive(sock_handle_t sd, void* buffer, socklen_t len, system_tick_t _timeout)
{
    sock_result_t bytes_read = -1;
    socket_t* socket = from_handle(sd);
    if (is_open(socket)) {
        std::lock_guard<socket_t> lk(*socket);
        if (is_tcp(socket)) {
            tcp_socket_t* tcp_socket = tcp(socket);
            tcp_packet_t& packet = tcp_socket->packet;
            bytes_read = read_packet_and_dispose(packet, buffer, len, tcp_socket, _timeout);
        }
        else if (is_client(socket)) {
            tcp_server_client_t* server_client = client(socket);
            bytes_read = read_packet_and_dispose(server_client->packet, buffer, len, server_client->get_socket(), _timeout);
        }
    }
    if (bytes_read<0)
    		DEBUG("socket_receive on %d returned %d", sd, bytes_read);
    return bytes_read;
}
示例#8
0
/* for constructing a packet that is captured */
void Packet::build_pkt(const uint8_t *b, uint16_t len) 
{
   reset();
   memcpy(buf_, b, len);
   payload = buf_;
   ip_hdr = (struct ip*)buf_;
   if(is_tcp()) 
   {
      tcp_hdr = (struct tcphdr*)((uint8_t *)(ip_hdr) + get_ip_hdr_len());
      set_payload((uint8_t *)((uint8_t *)(tcp_hdr) + get_tcp_hdr_len()));
   } 
   else if (is_icmp()) 
   {
      icmp_hdr = (struct icmphdr*)((uint8_t *)(ip_hdr) + get_ip_hdr_len());
      set_payload((uint8_t *)((uint8_t *)(icmp_hdr) + ICMP_H));
   } 
   else 
   {
      logger->PrintErr("[%s:%d] Only support TCP/ICMP/IP now!\n", __FILE__, __LINE__);
   }
}
示例#9
0
uint8_t* Packet::get_tcp_opt(uint8_t opt) 
{
   uint16_t len;
   uint8_t* tcp_opt;
   uint8_t* p;
   
   if(!is_tcp()) 
   {
      return NULL;
   }
   
   if((len=get_tcp_opt_len()) <= 0) 
   {
      return NULL;
   }

   p = tcp_opt = (uint8_t*)tcp_hdr + TCP_H;
   while (p<(tcp_opt+len)) 
   {
      if(*p==opt) 
      {
	 return p+2;
      }
      switch(*p) 
      {
	 case TCPOPT_EOL:
	 case TCPOPT_NOP:
	    p++;
	    break;
	 default:
	    p+=*(p+1);
	    break;
      }
   }
   return NULL;
}
示例#10
0
uint16_t Packet::get_tcp_payload_len() 
{ 
   return (is_tcp())?(get_ip_len()-get_ip_hdr_len()-get_tcp_hdr_len()):0; 
}
示例#11
0
bool Packet::is_tcp_urg() 
{ 
   return is_tcp() && tcp_hdr->urg > 0; 
}
示例#12
0
bool Packet::is_tcp_ack() 
{ 
   return is_tcp() && tcp_hdr->ack > 0; 
}
示例#13
0
bool Packet::is_tcp_psh() 
{ 
   return is_tcp() && tcp_hdr->psh > 0; 
}
示例#14
0
bool Packet::is_tcp_rst() 
{
   return is_tcp() && tcp_hdr->rst > 0; 
}
示例#15
0
bool Packet::is_tcp_syn() 
{
   return is_tcp() && tcp_hdr->syn > 0; 
}
示例#16
0
bool Packet::is_tcp_fin() 
{ 
   return is_tcp() && tcp_hdr->fin > 0; 
}
示例#17
0
static bool
pred_is_tcp(arguments_t args, SkBuff b)
{
        return  is_tcp(b);
}
示例#18
0
	bool is_reliable() const { return is_tcp(); }
示例#19
0
	unsigned int extra_transport_bytes() const
	{
		return is_tcp() ? sizeof(boost::uint16_t) : 0;
	}
示例#20
0
inline tcp_socket_t* tcp(socket_t* socket) { return is_tcp(socket) ? &socket->s.tcp : NULL; }