void send_coap_post(uint8_t *data, size_t len) { uint8_t snd_buf[512]; size_t req_pkt_sz; coap_buffer_t payload = { .p = data, .len = len }; coap_packet_t req_pkt = { .header = req_hdr, .token = (coap_buffer_t) { 0 }, .numopts = 1, .opts = {{{(uint8_t *)"senml", 5}, (uint8_t)COAP_OPTION_URI_PATH}}, .payload = payload }; req_pkt_sz = sizeof(req_pkt); if (coap_build(snd_buf, &req_pkt_sz, &req_pkt) != 0) { printf("CoAP build failed :(\n"); return; } conn_udp_sendto(snd_buf, req_pkt_sz, NULL, 0, &dst_addr, sizeof(dst_addr), AF_INET6, SPORT, UDP_PORT); }
int udp_send(int argc, char **argv) { if (argc != 4) { puts("Usage: udp <ipv6-addr> <port> <payload>"); return -1; } int res; ipv6_addr_t src = IPV6_ADDR_UNSPECIFIED, dst; if (ipv6_addr_from_str(&dst, argv[1]) == NULL) { puts("Error: unable to parse destination address"); return 1; } if((res = conn_udp_sendto(argv[3], strlen(argv[3]), &src, sizeof(src), &dst, sizeof(dst), AF_INET6, 1234, (uint16_t) (atoi(argv[2])))) < 0) { puts("could not send"); } else { //printf("Success: send %u byte to %s\n", (unsigned) res, argv[1]); if (gnrc_rpl_instances[0].state && gnrc_rpl_instances[0].dodag.node_status != GNRC_RPL_ROOT_NODE) { if (acked) { time = xtimer_now64(); acked = false; } } } return 0; }
void *microcoap_server(void *arg) { (void) arg; msg_init_queue(_coap_msg_q, Q_SZ); uint8_t laddr[16] = { 0 }; uint8_t raddr[16] = { 0 }; size_t raddr_len; uint16_t rport; conn_udp_t conn; int rc = conn_udp_create(&conn, laddr, sizeof(laddr), AF_INET6, COAP_SERVER_PORT); while (1) { if ((rc = conn_udp_recvfrom(&conn, (char *)udp_buf, sizeof(udp_buf), raddr, &raddr_len, &rport)) < 0) { continue; } coap_packet_t pkt; /* parse UDP packet to CoAP */ if (0 == (rc = coap_parse(&pkt, udp_buf, rc))) { coap_packet_t rsppkt; /* handle CoAP request */ coap_handle_req(&scratch_buf, &pkt, &rsppkt, false, false); /* build reply */ size_t rsplen = sizeof(udp_buf); if ((rc = coap_build(udp_buf, &rsplen, &rsppkt)) == 0) { /* send reply via UDP */ rc = conn_udp_sendto(udp_buf, rsplen, NULL, 0, raddr, raddr_len, AF_INET6, COAP_SERVER_PORT, rport); } } } /* never reached */ return NULL; }
int udp_send(int argc, char **argv) { if (argc != 4) { puts("Usage: udp <ipv6-addr> <port> <payload>"); return -1; } int res; ipv6_addr_t src = IPV6_ADDR_UNSPECIFIED, dst; if (ipv6_addr_from_str(&dst, argv[1]) == NULL) { puts("Error: unable to parse destination address"); return 1; } if((res = conn_udp_sendto(argv[3], strlen(argv[3]), &src, sizeof(src), &dst, sizeof(dst), AF_INET6, 1234, (uint16_t) (atoi(argv[2])))) < 0) { puts("could not send"); } else { printf("Success: send %u byte to %s\n", (unsigned) res, argv[1]); } return 0; }