Exemple #1
0
void do_pb_show_plain(int fd, int type, int single_entry,
		void (*payload_hadler)(int fd, void *obj),
		const char *pretty_fmt)
{
	pb_pr_ctl_t ctl = {NULL, single_entry, pretty_fmt};
	void (*handle_payload)(int fd, void *obj);

	if (!cr_pb_descs[type].pb_desc) {
		pr_err("Wrong object requested %d\n", type);
		return;
	}

	handle_payload = (payload_hadler) ? : pb_no_payload;

	while (1) {
		void *obj;

		if (pb_read_one_eof(fd, &obj, type) <= 0)
			break;

		ctl.arg = (void *)cr_pb_descs[type].pb_desc;
		pb_show_msg(obj, &ctl);
		handle_payload(fd, obj);
		cr_pb_descs[type].free(obj, NULL);
		if (single_entry)
			break;
		pr_msg("\n");
	}
}
Exemple #2
0
Fichier : tcp.c Projet : fjrk/RIOT
void handle_tcp_no_flags_packet(ipv6_hdr_t *ipv6_header, tcp_hdr_t *tcp_header,
                                socket_internal_t *tcp_socket, uint8_t *payload)
{
    uint8_t tcp_payload_len = ipv6_header->length - TCP_HDR_LEN, read_bytes = 0;
    socket_t *current_tcp_socket = &tcp_socket->socket_values;
    uint8_t send_buffer[BUFFER_SIZE];
    ipv6_hdr_t *temp_ipv6_header = ((ipv6_hdr_t *)(&send_buffer));
    tcp_hdr_t *current_tcp_packet = ((tcp_hdr_t *)(&send_buffer[IPV6_HDR_LEN]));

    if (tcp_payload_len > 0) {

        if (check_tcp_consistency(current_tcp_socket, tcp_header) == PACKET_OK) {
            read_bytes = handle_payload(ipv6_header, tcp_header, tcp_socket, payload);

            /* Refresh TCP status values */
            current_tcp_socket->tcp_control.state = ESTABLISHED;

            set_tcp_cb(&current_tcp_socket->tcp_control,
                       tcp_header->seq_nr + read_bytes,
                       current_tcp_socket->tcp_control.rcv_wnd,
                       current_tcp_socket->tcp_control.send_nxt,
                       current_tcp_socket->tcp_control.send_una,
                       current_tcp_socket->tcp_control.send_wnd);

            /* Send packet */
            //			block_continue_thread();
#ifdef TCP_HC
            current_tcp_socket->tcp_control.tcp_context.hc_type = COMPRESSED_HEADER;
#endif
            send_tcp(tcp_socket, current_tcp_packet, temp_ipv6_header, TCP_ACK, 0);
        }
        /* ACK packet probably got lost */
        else {
            //			block_continue_thread();
#ifdef TCP_HC
            current_tcp_socket->tcp_control.tcp_context.hc_type = FULL_HEADER;
#endif
            send_tcp(tcp_socket, current_tcp_packet, temp_ipv6_header, TCP_ACK, 0);
        }
    }
}