/** * @brief the main programm loop * * @return non zero on error */ int main(void) { // some initial infos puts("SmartUniversity - COAP Example!"); puts("================"); printf("You are running RIOT on a(n) %s board.\n", RIOT_BOARD); printf("This board features a(n) %s MCU.\n", RIOT_MCU); puts("================"); // init coap endpoints endpoint_setup(); // start coap receiver start_coap_server(); // start shell puts("All up, running the shell now"); char line_buf[SHELL_DEFAULT_BUFSIZE]; shell_run(shell_commands, line_buf, SHELL_DEFAULT_BUFSIZE); // should be never reached return 0; }
int main(void){ //READ IN HOW MANY TAP DEVICE TO CREATE (MAX 9999) //File locker struct flock fl; pid_t tid = syscall(SYS_gettid); fl.l_type = F_RDLCK; /* F_RDLCK, F_WRLCK, F_UNLCK */ fl.l_whence = SEEK_SET; /* SEEK_SET, SEEK_CUR, SEEK_END */ fl.l_start = 0; /* Offset from l_whence */ fl.l_len = 0; /* length, 0 = to EOF */ fl.l_pid = tid; /* our PID */ //READ THE SIZE OF TAP_CONTROL_SIZE FILE char ffile_size[2]; int file_size,tap_num; int fp = open("./coap/tap_control_size.txt", O_RDONLY); fcntl(fp, F_SETLKW, &fl); //Locks the file for reading if(0 > fp) { printf("\n tap_control_size:open() Error!!!\n"); return 1; } read(fp,ffile_size,2); //CLOSE FILE if(0 > close(fp)) { printf("\n tap_control_size:close() Error!!!\n"); return 1; } fl.l_type = F_UNLCK; /* tell it to unlock the region */ fcntl(fp, F_SETLK, &fl); /* set the region to unlocked */ file_size = (int)(ffile_size[0] - '0'); //OPEN FILE TO DETERMINE WHICH CLIENT IS THIS ONE char file_num[file_size]; fl.l_type = F_RDLCK; fp = open("./coap/tap_control.txt", O_RDONLY); fcntl(fp, F_SETLKW, &fl); //Locks the file for reading if(0 > fp) { printf("\n tap_control:open() Error!!!\n"); return 1; } read(fp,file_num,file_size); //CLOSE FILE if(0 > close(fp)) { printf("\n tap_control:close() Error!!!\n"); return 1; } fl.l_type = F_UNLCK; /* tell it to unlock the region */ fcntl(fp, F_SETLK, &fl); /* set the region to unlocked */ //CONVERT IT TO INT tap_num=0; if(file_size == 4){ tap_num += (int)(file_num[0] - '0')*1000; tap_num += (int)(file_num[1] - '0')*100; tap_num += (int)(file_num[2] - '0')*10; tap_num += (int)(file_num[3] - '0'); } else if(file_size == 3){ tap_num += (int)(file_num[0] - '0')*100; tap_num += (int)(file_num[1] - '0')*10; tap_num += (int)(file_num[2] - '0'); } else if(file_size == 2){ tap_num += (int)(file_num[0] - '0')*10; tap_num += (int)(file_num[1] - '0'); } else tap_num += (int)(file_num[0] - '0'); //CREATE TAP DEVICE puts("Starting the RIOT\n"); int fd; char name[3+file_size]; strcpy(name,"tap"); int i; for(i=0;i<file_size;i++) name[3+i]=file_num[i]; name[3+file_size]=0; printf("TAP DEIVCE: %s\n",name); struct sockaddr_in6 servaddr; // struct ifreq ifr;// struct sockaddr_in6 cliaddr; uint8_t buf[4096]; uint8_t scratch_raw[4096]; coap_rw_buffer_t scratch_buf = {scratch_raw, sizeof(scratch_raw)}; fd = socket(AF_INET6,SOCK_DGRAM,0);//Socket file descriptor init bzero(&servaddr,sizeof(servaddr)); servaddr.sin6_family = AF_INET6;//inet family servaddr.sin6_flowinfo = 0;//?? int ip8_1=0,ip8_2=0; servaddr.sin6_addr.s6_addr[0] = (uint8_t)0x30;//IPv6 Address 1 servaddr.sin6_addr.s6_addr[1] = (uint8_t)0x00; servaddr.sin6_addr.s6_addr[2] = (uint8_t)0x00;//IPv6 Address 2 servaddr.sin6_addr.s6_addr[3] = (uint8_t)0x00; servaddr.sin6_addr.s6_addr[4] = (uint8_t)0x00;//IPv6 Address 3 servaddr.sin6_addr.s6_addr[5] = (uint8_t)0x00; servaddr.sin6_addr.s6_addr[6] = (uint8_t)0x00;//IPv6 Address 4 servaddr.sin6_addr.s6_addr[7] = (uint8_t)0x00; servaddr.sin6_addr.s6_addr[8] = (uint8_t)0x11;//IPv6 Address 5 servaddr.sin6_addr.s6_addr[9] = (uint8_t)0x11; servaddr.sin6_addr.s6_addr[10] = (uint8_t)0x22;//IPv6 Address 6 servaddr.sin6_addr.s6_addr[11] = (uint8_t)0x22; servaddr.sin6_addr.s6_addr[12] = (uint8_t)0x33;//IPv6 Address 7 servaddr.sin6_addr.s6_addr[13] = (uint8_t)0x33; if(file_size == 4){ ip8_1 += (int)(file_num[0] - '0')*16; ip8_1 += (int)(file_num[1] - '0'); ip8_2 += (int)(file_num[2] - '0')*16; ip8_2 += (int)(file_num[3] - '0'); } else if(file_size == 3){ ip8_1 += (int)(file_num[0] - '0'); ip8_2 += (int)(file_num[1] - '0')*16; ip8_2 += (int)(file_num[2] - '0'); } else if(file_size == 2){ ip8_2 += (int)(file_num[0] - '0')*16; ip8_2 += (int)(file_num[1] - '0'); } else ip8_2 += (int)(file_num[0] - '0'); servaddr.sin6_addr.s6_addr[14] = (uint8_t)ip8_1;//IPv6 Address 8 //TODO servaddr.sin6_addr.s6_addr[15] = (uint8_t)ip8_2; servaddr.sin6_port = htons(PORT); //PORT (5683) bind(fd,(struct sockaddr *)&servaddr, sizeof(servaddr)); endpoint_setup(); while(1) { int n, rc; socklen_t len = sizeof(cliaddr); coap_packet_t pkt; n = recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *)&cliaddr, &len); //#ifdef DEBUG printf("Received: "); coap_dump(buf, n, true); printf("\n"); //#endif if (0 != (rc = coap_parse(&pkt, buf, n))) printf("Bad packet rc=%d\n", rc); else { size_t rsplen = sizeof(buf); coap_packet_t rsppkt; #ifdef DEBUG coap_dumpPacket(&pkt); #endif coap_handle_req(&scratch_buf, &pkt, &rsppkt); if (0 != (rc = coap_build(buf, &rsplen, &rsppkt))) printf("coap_build failed rc=%d\n", rc); else { #ifdef DEBUG printf("Sending: "); coap_dump(buf, rsplen, true); printf("\n"); #endif #ifdef DEBUG coap_dumpPacket(&rsppkt); #endif sendto(fd, buf, rsplen, 0, (struct sockaddr *)&cliaddr, sizeof(cliaddr)); } } } }
void CoapServ(void* parg) { int fd; struct sockaddr_in servaddr, cliaddr; coap_rw_buffer_t scratch_buf = {scratch_raw, sizeof(scratch_raw)}; (void)parg; if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { printf("Socket Error\r\n"); exit(0); } servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(COAPSERV_PORT); memset(&(servaddr.sin_zero), 0, sizeof(servaddr.sin_zero)); if ((bind(fd, (struct sockaddr *)&servaddr, sizeof(servaddr))) == -1) { printf("Bind error\r\n"); exit(0); } endpoint_setup(); printf("Coap Server Start!\r\n"); while(1) { int n, rc; socklen_t len = sizeof(cliaddr); coap_packet_t pkt; n = recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *)&cliaddr, &len); if (0 != (rc = coap_parse(&pkt, buf, n))) { printf("Bad packet rc=%d\r\n", rc); } else { printf("payload : %s \r\n", pkt.payload.p); //coapServ reply client { size_t rsplen = sizeof(buf); coap_packet_t rsppkt; coap_handle_req(&scratch_buf, &pkt, &rsppkt); if (0 != (rc = coap_build(buf, &rsplen, &rsppkt))) { printf("coap_build failed rc=%d\n", rc); } else { sendto(fd, buf, rsplen, 0, (struct sockaddr *)&cliaddr, sizeof(cliaddr)); } } } }/*while(1)--END*/ }
int main(int argc, char **argv) { (void)argc; (void)argv; puts("Starting the RIOT\n"); int fd,tap_fd; const char *clonedev = "/dev/net/tun"; char *name = "tap0"; struct sockaddr_in6 servaddr, cliaddr; struct ifreq ifr; uint8_t buf[4096]; uint8_t scratch_raw[4096]; coap_rw_buffer_t scratch_buf = {scratch_raw, sizeof(scratch_raw)}; fd = socket(AF_INET6,SOCK_DGRAM,0);//Socket file descriptor init bzero(&servaddr,sizeof(servaddr)); servaddr.sin6_family = AF_INET6;//inet family servaddr.sin6_flowinfo = 0;//?? servaddr.sin6_addr.s6_addr[0] = (uint8_t)0x30;//IPv6 Address 1 servaddr.sin6_addr.s6_addr[1] = (uint8_t)0x00; servaddr.sin6_addr.s6_addr[2] = (uint8_t)0x00;//IPv6 Address 2 servaddr.sin6_addr.s6_addr[3] = (uint8_t)0x00; servaddr.sin6_addr.s6_addr[4] = (uint8_t)0x00;//IPv6 Address 3 servaddr.sin6_addr.s6_addr[5] = (uint8_t)0x00; servaddr.sin6_addr.s6_addr[6] = (uint8_t)0x00;//IPv6 Address 4 servaddr.sin6_addr.s6_addr[7] = (uint8_t)0x00; servaddr.sin6_addr.s6_addr[8] = (uint8_t)0x11;//IPv6 Address 5 servaddr.sin6_addr.s6_addr[9] = (uint8_t)0x11; servaddr.sin6_addr.s6_addr[10] = (uint8_t)0x22;//IPv6 Address 6 servaddr.sin6_addr.s6_addr[11] = (uint8_t)0x22; servaddr.sin6_addr.s6_addr[12] = (uint8_t)0x33;//IPv6 Address 7 servaddr.sin6_addr.s6_addr[13] = (uint8_t)0x33; servaddr.sin6_addr.s6_addr[14] = (uint8_t)0x00;//IPv6 Address 8 servaddr.sin6_addr.s6_addr[15] = (uint8_t)0x01; servaddr.sin6_port = htons(PORT); //PORT (5683) bind(fd,(struct sockaddr *)&servaddr, sizeof(servaddr)); //Set TAP device up, give it local ipv6 address /* implicitly create the tap interface */ if ((tap_fd = real_open(clonedev , O_RDWR)) == -1) { err(EXIT_FAILURE, "open(%s)", clonedev); } memset(&ifr, 0, sizeof(ifr)); ifr.ifr_flags = IFF_TAP | IFF_NO_PI; strncpy(ifr.ifr_name, name, IFNAMSIZ); if (real_ioctl(tap_fd, TUNSETIFF, (void *)&ifr) == -1) { _native_in_syscall++; warn("ioctl TUNSETIFF"); warnx("probably the tap interface (%s) does not exist or is already in use", name); real_exit(EXIT_FAILURE); } //TODO Add Global IP endpoint_setup(); while(1) { int n, rc; socklen_t len = sizeof(cliaddr); coap_packet_t pkt; n = recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *)&cliaddr, &len); //#ifdef DEBUG printf("Received: "); coap_dump(buf, n, true); printf("\n"); //#endif if (0 != (rc = coap_parse(&pkt, buf, n))) printf("Bad packet rc=%d\n", rc); else { size_t rsplen = sizeof(buf); coap_packet_t rsppkt; #ifdef DEBUG coap_dumpPacket(&pkt); #endif coap_handle_req(&scratch_buf, &pkt, &rsppkt); if (0 != (rc = coap_build(buf, &rsplen, &rsppkt))) printf("coap_build failed rc=%d\n", rc); else { #ifdef DEBUG printf("Sending: "); coap_dump(buf, rsplen, true); printf("\n"); #endif #ifdef DEBUG coap_dumpPacket(&rsppkt); #endif sendto(fd, buf, rsplen, 0, (struct sockaddr *)&cliaddr, sizeof(cliaddr)); } } } }
void ICACHE_FLASH_ATTR coap_server(void *pvParameters) { int fd; struct sockaddr_in servaddr, cliaddr; coap_rw_buffer_t scratch_buf = {scratch_raw, sizeof(scratch_raw)}; if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { // shell_printf("\nSocket Error\r\n"); return; } servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(PORT); memset(&(servaddr.sin_zero), 0, sizeof(servaddr.sin_zero)); if ((bind(fd, (struct sockaddr *)&servaddr, sizeof(servaddr))) == -1) { // shell_printf("Bind error\r\n"); return; } endpoint_setup(); // shell_printf("Coap Server Start!\r\n"); while (1) { int n, rc; socklen_t len = sizeof(cliaddr); coap_packet_t pkt; n = recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *)&cliaddr, &len); #ifdef MICROCOAP_DEBUG // shell_printf("\r\n--------------------\r\n"); // shell_printf("Received Buffer: \r\n"); // coap_dump(buf, n, true); // shell_printf("\r\n"); #endif if (0 != (rc = coap_parse(&pkt, buf, n))) { // shell_printf("Bad packet rc\r\n"); // shell_printf("Bad packet rc=%d\r\n", rc); } else { size_t rsplen = sizeof(buf); coap_packet_t rsppkt; // printf("Dump Packet: \r\n"); // coap_dumpPacket(&pkt); coap_handle_req(&scratch_buf, &pkt, &rsppkt); if (0 != (rc = coap_build(buf, &rsplen, &rsppkt))) { // printf("coap_build failed rc=%d\n", rc); } else { // shell_printf("--------------------\r\n"); // shell_printf("Sending Buffer: \r\n"); // coap_dump(buf, rsplen, true); // printf("\r\n"); // coap_dumpPacket(&rsppkt); sendto(fd, buf, rsplen, 0, (struct sockaddr *)&cliaddr, sizeof(cliaddr)); } } } }