/* accept an incoming connection */ bool sock_accept(Socket *sockp, const char *mode, bool pasvmode) { if (!sockp) return false; if (!pasvmode) { struct sockaddr_storage sa; socklen_t l = sizeof(sa); int s = accept(sockp->handle, (struct sockaddr*)&sa, &l); close(sockp->handle); if (s == -1) { perror("accept()"); sockp->handle = -1; return false; } sockp->handle = s; memcpy(&sockp->local_addr, &sa, l); } if (!create_streams(sockp, mode, mode)) { close(sockp->handle); sockp->handle = -1; return false; } return true; }
static bool ps_connect_addr(Socket *sockp, const struct sockaddr* sa, socklen_t salen) { if (sockp->data->handle != -1) return false; sockp->data->handle = socket(sa->sa_family, SOCK_STREAM, IPPROTO_TCP); if (sockp->data->handle == -1) return false; /* connect to the socket */ if (connect(sockp->data->handle, sa, salen) == -1) { perror("connect()"); close(sockp->data->handle); sockp->data->handle = -1; return false; } if (!ps_getsockname(sockp, &sockp->local_addr)) { perror("getsockname()"); close(sockp->data->handle); sockp->data->handle = -1; return false; } memcpy(&sockp->remote_addr, sa, salen); if (!create_streams(sockp->data, "r", "w")) { close(sockp->data->handle); sockp->data->handle = -1; return false; } sockp->connected = true; return true; }
int main(int argc, char *argv[]) { char *master_key=0; fp = 0; APPL_TRACE_INFO("Starting with M2x \n"); if (argc < 2) { printf("Correct Usage brcm_m2x_demo <<filename>>\n"); /* exit(1);*/ } else { APPL_TRACE_INFO("Opening File: %s\n", argv[1]); fp = fopen(argv[1], "r"); } if (argc < 2) { APPL_TRACE_INFO("Opening File: /etc/m2x/m2x_key \n" ); fp = fopen("/etc/m2x/m2x_key", "r"); } if (fp) { /* 1.1 Read the key from the file. */ master_key = (char *) malloc(strlen(M2X_KEY) * sizeof (char)); fscanf(fp,"%s",master_key ); APPL_TRACE_INFO("Master Key from file: %s\n", master_key); /*memcpy(master_key,, strlen(M2X_KEY));*/ ctx = m2x_open(master_key); free(master_key); fclose(fp); } else { /* 1.1 Open the Account using Master Key. */ APPL_TRACE_INFO("Error in opening file %s\n", argv[1]); APPL_TRACE_INFO("reading default master key: %s\n", M2X_KEY); ctx = m2x_open(M2X_KEY); } for (i=0; i < MAX_STREAM; i++) { printf("Need to create %d M2X Stream :\"%s\" of size=%d \n", i, stream_name_list[i], strlen(stream_name_list[i])); } /* 1.2 Enable Verbose */ m2x_set_verbose(ctx, 1); /* Create Device and Stream*/ #ifdef RUN_M2X create_device(); create_streams(); #endif /* Open Server Socket */ server_fd = socket_server_open(WICED_M2X_SOCK_PATH); APPL_TRACE_ERROR1("socket_local_client: fd = %d \n", server_fd); if(server_fd > 0) { APPL_TRACE_INFO("socket_local_server: opening server socket successful \n"); } else { APPL_TRACE_ERROR1("socket_local_server: returned error %d \n", errno ); exit(0); } while (1) { FD_ZERO(&socks_rd); FD_SET(server_fd, &socks_rd); max_fd = server_fd; if(read_fd > 0) { FD_SET(read_fd, &socks_rd); if (read_fd > max_fd) max_fd = read_fd; } status = select (max_fd + 1, &socks_rd, (fd_set *) NULL,(fd_set *) NULL,NULL); if(status < 0) { strerror_r(errno, errorstring, sizeof(errorstring)); APPL_TRACE_ERROR1("server: select failed(%s)", errorstring); exit(0); } else { length = 0; if(FD_ISSET(server_fd, &socks_rd)) { read_fd = accept(server_fd, NULL, NULL); if ( read_fd < 0) { strerror_r(errno, errorstring, sizeof(errorstring)); APPL_TRACE_ERROR1("server: accept error %s", errorstring); } else { APPL_TRACE_INFO("server: client connected %d", read_fd); } } /* If there is something to read from the socket */ if (FD_ISSET(read_fd, &socks_rd)) { /* Read length */ status = read(read_fd, (void *)&length, 2); if(status <= 0 ) { strerror_r(errno, errorstring, sizeof(errorstring)); APPL_TRACE_ERROR1("server: read failed(%s)", errorstring); close(read_fd); read_fd = -1; } else { APPL_TRACE_INFO("received length:%d", length); } status = read(read_fd, (UINT8 *) &buf[0], length); if(status <= 0 ) { strerror_r(errno, errorstring, sizeof(errorstring)); APPL_TRACE_ERROR1("server: read failed(%s)", errorstring); close(read_fd); read_fd = -1; } else { printf("Received data: "); for (i=0;i<length;i++) { printf("%c", buf[i]); } printf("\n"); post_to_m2x(length, buf); } } } } close(read_fd); close(server_fd); }