Created
March 3, 2017 01:10
-
-
Save jmorrill/22d56ba5d75c4a1e1e4fe05eaec3e915 to your computer and use it in GitHub Desktop.
udp test for wsl
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include "uv.h" | |
const char* probe_message = "<Envelope xmlns=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:dn=\"http://www.onvif.org/ver10/network/wsdl\">" | |
"<Header>" | |
"<wsa:MessageID xmlns:wsa=\"http://schemas.xmlsoap.org/ws/2004/08/addressing\">urn:uuid:C97CF2F7-615A-493C-88FE-7D39B94906E0</wsa:MessageID>" | |
"<wsa:To xmlns:wsa=\"http://schemas.xmlsoap.org/ws/2004/08/addressing\">urn:schemas-xmlsoap-org:ws:2005:04:discovery</wsa:To>" | |
"<wsa:Action xmlns:wsa=\"http://schemas.xmlsoap.org/ws/2004/08/addressing\">http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe</wsa:Action>" | |
"</Header>" | |
"<Body>" | |
"<Probe xmlns=\"http://schemas.xmlsoap.org/ws/2005/04/discovery\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" | |
"<Types>dn:NetworkVideoTransmitter</Types>" | |
"<Scopes />" | |
"</Probe>" | |
"</Body>" | |
"</Envelope>"; | |
#define CHECK(r, msg) \ | |
if (r) { \ | |
printf("error %d %s\n", r, msg); \ | |
exit(1); \ | |
} | |
static uv_loop_t *uv_loop; | |
static uv_udp_t server; | |
void on_recv(uv_udp_t*handle, ssize_t nread, const uv_buf_t * buf, const struct sockaddr* addr, unsigned flags) | |
{ | |
printf("on recv flags %d\n", flags); | |
if(flags & UV_UDP_PARTIAL) | |
{ | |
printf("DATA DROPPED BY OS\n"); | |
} | |
if (nread > 0) { | |
printf("bytes read: %lu strlen %lu\n",nread, strlen((char*)buf->base)); | |
printf("%s",buf->base); | |
} | |
} | |
void on_alloc(uv_handle_t* client, size_t suggested_size, uv_buf_t * buf) | |
{ | |
buf->base = malloc(suggested_size); | |
buf->len = suggested_size; | |
printf("malloc:%lu %p\n",buf->len, buf->base); | |
} | |
int main(int argc,char *argv[]) | |
{ | |
int status; | |
struct sockaddr_in addr; | |
uv_loop = uv_default_loop(); | |
status = uv_udp_init(uv_loop, &server); | |
CHECK(status,"init"); | |
status = uv_ip4_addr("0.0.0.0", 0, &addr); | |
CHECK(status, "ip4_addr"); | |
status = uv_udp_bind(&server, (const struct sockaddr *)&addr, 0); | |
CHECK(status,"bind"); | |
status = uv_udp_recv_start(&server, on_alloc, on_recv); | |
CHECK(status,"recv"); | |
uv_udp_send_t send_req; | |
uv_buf_t buffer; | |
buffer.base = (void*)probe_message; | |
buffer.len = strlen(probe_message); | |
struct sockaddr_in send_addr; | |
status = uv_ip4_addr("239.255.255.250", 3702, &send_addr); | |
status = uv_udp_send(&send_req, &server, &buffer, 1, (const struct sockaddr *)&send_addr, NULL); | |
CHECK(status,"uv_udp_send"); | |
uv_run(uv_loop, UV_RUN_DEFAULT); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment