int main (int argc, const char *argv[]) { int sock; int i = 0; if (argc >1){ ip = malloc(sizeof(char) * strlen(argv[1])); strcpy(ip,argv[1]); if (argc >2){ port = malloc(sizeof(char) * strlen(argv[2])); strcpy(port,argv[2]); if (argc >3){ wsName = malloc(sizeof(char) * strlen(argv[3])); strcpy(wsName,argv[3]); } } } fullDir = buildAddress(); trace(1, fullDir); memset(glob, 0, sizeof(*glob)); if (!create_listen_sock(FPM_DEFAULT_PORT, &glob->server_sock)) { exit(1); } /* * Server forever. */ while (1) { glob->sock = accept_conn(glob->server_sock); fpm_serve(); trace(1, "Done serving client"); } }
void create_listen_thread(int port, char *addr, int main_sock) { int sock, newfd; int opt = 1; socklen_t s_size; pthread_t th; struct th_data *th_d1 = (struct th_data*) malloc(sizeof(struct th_data)); struct sockaddr_in struct_addr; if(main_sock == 0) sock = create_listen_sock(port, addr); else sock = main_sock; int s_len = sizeof(struct_addr); getsockname(sock, (struct sockaddr*) &struct_addr, &s_len); s_size = sizeof(struct_addr); if((newfd = accept(sock, (struct sockaddr *) &struct_addr, &s_size)) == -1) { perror("accept"); //exit(EXIT_FAILURE); } setsockopt(newfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); th_d1->port = port; th_d1->sock = newfd; pthread_create(&th, NULL, th_listen, (void*) th_d1); }
int main(int argc, char **argv) { int sock, port; void *status; char addr[INET_ADDRSTRLEN]; pthread_t *ptr_th; memcpy(addr, BIND_ADDR, INET_ADDRSTRLEN); port = PORT; sock = create_listen_sock(port, addr); while(1) { create_listen_thread(port, addr, sock); } pthread_exit(NULL); return 0; }
int jtagHostLoop() { apr_status_t rv; apr_pool_t *mp; apr_pollset_t *pollset; apr_int32_t num; const apr_pollfd_t *ret_pfd; apr_initialize(); apr_pool_create(&mp, NULL); serv_ctx_t *channel_contexts[IPDBG_CHANNELS]; apr_pollset_create(&pollset, DEF_POLLSET_NUM, mp, 0); for(uint8_t ch = 0; ch < IPDBG_CHANNELS; ++ch) { serv_ctx_t *serv_ctx = apr_palloc(mp, sizeof(serv_ctx_t)); channel_contexts[ch] = serv_ctx; serv_ctx->channel_number = ch; serv_ctx->channel_state = listening; serv_ctx->up_buf_level = 0; serv_ctx->down_buf_level = 0; if(ch == 0) serv_ctx->valid_mask = IPDBG_LA_VALID_MASK; if(ch == 1) serv_ctx->valid_mask = IPDBG_IOVIEW_VALID_MASK; if(ch == 2) serv_ctx->valid_mask = IPDBG_GDB_VALID_MASK; if(ch == 3) serv_ctx->valid_mask = IPDBG_WFG_VALID_MASK; apr_socket_t *listening_sock = create_listen_sock(mp, ch); assert(listening_sock); apr_pollfd_t pfd = { mp, APR_POLL_SOCKET, APR_POLLIN, 0, { NULL }, serv_ctx }; pfd.desc.s = listening_sock; apr_pollset_add(pollset, &pfd); } // reset JtagCDC uint16_t val; ipdbgJTAGtransfer(&val, 0xf00); while (1) { size_t transfers = 0; for(size_t ch = 0 ; ch < IPDBG_CHANNELS ; ++ch) { for(size_t idx = 0 ; idx < channel_contexts[ch]->down_buf_level; ++idx) { uint16_t val; ipdbgJTAGtransfer(&val, channel_contexts[ch]->down_buf[idx] | channel_contexts[ch]->valid_mask); transfers++; distribute_to_up_buffer(val, channel_contexts); } channel_contexts[ch]->down_buf_level = 0; } for(size_t k = transfers ; k < MIN_TRANSFERS ; ++k) { uint16_t val; ipdbgJTAGtransfer(&val, 0x000); distribute_to_up_buffer(val, channel_contexts); } rv = apr_pollset_poll(pollset, DEF_POLL_TIMEOUT, &num, &ret_pfd); if (rv == APR_SUCCESS) { int i; /* scan the active sockets */ for (i = 0; i < num; i++) { serv_ctx_t *serv_ctx = ret_pfd[i].client_data; if(serv_ctx) { if (serv_ctx->channel_state == listening) { apr_socket_t *listening_sock = ret_pfd[i].desc.s; /* the listen socket is readable. that indicates we accepted a new connection */ do_accept(serv_ctx, pollset, listening_sock, mp); apr_socket_close(listening_sock); apr_pollset_remove(pollset, &ret_pfd[i]); } else { int ret = TRUE; if(ret_pfd[i].rtnevents & (APR_POLLIN | APR_POLLHUP)) { ret = connection_rx_cb(serv_ctx, pollset, ret_pfd[i].desc.s); } else // (ret_pfd[i].rtnevents & APR_POLLOUT) { ret = connection_tx_cb(serv_ctx, pollset, ret_pfd[i].desc.s); } if (ret == FALSE) { //printf("closing connection %d", serv_ctx->channel_number); apr_socket_t *sock = ret_pfd[i].desc.s; apr_socket_close(sock); apr_pollset_remove(pollset, &ret_pfd[i]); apr_socket_t *listening_sock = create_listen_sock(mp, serv_ctx->channel_number); serv_ctx->channel_state = listening; apr_pollfd_t pfd = { mp, APR_POLL_SOCKET, APR_POLLIN, 0, { NULL }, serv_ctx }; pfd.desc.s = listening_sock; apr_pollset_add(pollset, &pfd); } } } } } } return 0; }
/** * @remark Error checks omitted */ int main(int argc, const char *argv[]) { urj_chain_t *chain = ipdbgJtagAllocChain(); if(!chain) { printf("failed to allocate chain"); return -1; } printf("ipdbgJtagInit2\n"); char cable[200]; int vidNumber; int pidNumber; char feed; unsigned int freq = 100000; printf("::Use Default Settings? [y/n]\n::cable:ft2232\n::vid:0x0403\n::pid:0x6010\n::freq:2MHz\n"); scanf("%c", &feed); if(feed == 'y'|| feed == 'Y') { cable[0] = 'f'; cable[1] = 't'; cable[2] = '2'; cable[3] = '2'; cable[4] = '3'; cable[5] = '2'; cable[6] = '\0'; vidNumber = 0x0403; pidNumber = 0x6010; freq = 2000000; } else if (feed == 'n'||feed == 'N') { printf("select the cable:"); scanf("%s", cable); printf("select vid(in hex):"); scanf("%x", &vidNumber); printf("select pid:"); scanf("%x", &pidNumber); printf("select frequency [Hz]: "); scanf("%d", &freq); } char vid[200]; char pid[200]; sprintf(vid, "vid=0x%x", vidNumber); sprintf(pid, "pid=0x%x", pidNumber); /// select cable //char *Programmer_params[] = {"ft2232", "vid=0x0403", "pid=0x6010", 0}; char *Programmer_params[] = {cable, vid, pid, 0}; if(urj_tap_chain_connect(chain, Programmer_params[0], &(Programmer_params[1])) != 0) { printf("connect failed!\n"); return -1; } urj_tap_reset(chain); urj_tap_cable_set_frequency(chain->cable, freq); /// detect devices in chain const int maxIrLen = 0; #ifdef __unix__ int numberOfParts = urj_tap_detect_parts(chain, "/usr/share/urjtag", maxIrLen); #else int numberOfParts = urj_tap_detect_parts(chain, "urjtag", maxIrLen); #endif printf("number of parts detected = %d\n", numberOfParts); if ( numberOfParts == 0) { printf("detection of chain failed\n"); return -2; } int active_part = 0; if ( numberOfParts > 1) { /// select active part in chain printf("select the active part in chain: \n"); scanf("%d", &active_part); printf("selected part: %d\n", active_part); } if(ipdbgJtagInit(chain, active_part) != 0 ) { printf("failed to initialize chain"); return -1; } apr_status_t rv; apr_pool_t *mp; apr_pollset_t *pollset; apr_int32_t num; const apr_pollfd_t *ret_pfd; apr_initialize(); apr_pool_create(&mp, NULL); serv_ctx_t *channel_contexts[IPDBG_CHANNELS]; apr_pollset_create(&pollset, DEF_POLLSET_NUM, mp, 0); for(uint8_t ch = 0; ch < IPDBG_CHANNELS; ++ch) { serv_ctx_t *serv_ctx = apr_palloc(mp, sizeof(serv_ctx_t)); channel_contexts[ch] = serv_ctx; serv_ctx->channel_number = ch; serv_ctx->chain = chain; serv_ctx->channel_state = listening; serv_ctx->up_buf_level = 0; serv_ctx->down_buf_level = 0; if(ch == 0) serv_ctx->valid_mask = IPDBG_LA_VALID_MASK; /// if(ch == 1) serv_ctx->valid_mask = IPDBG_IOVIEW_VALID_MASK; /// if(ch == 2) serv_ctx->valid_mask = IPDBG_GDB_VALID_MASK; /// if(ch == 3) serv_ctx->valid_mask = IPDBG_WFG_VALID_MASK; /// apr_socket_t *listening_sock = create_listen_sock(mp, ch); assert(listening_sock); apr_pollfd_t pfd = { mp, APR_POLL_SOCKET, APR_POLLIN, 0, { NULL }, serv_ctx }; pfd.desc.s = listening_sock; apr_pollset_add(pollset, &pfd); } // reset JtagCDC uint16_t val; ipdbgJTAGtransfer(chain, &val, 0xf00); while (1) { size_t transfers = 0; for(size_t ch = 0 ; ch < IPDBG_CHANNELS ; ++ch) { for(size_t idx = 0 ; idx < channel_contexts[ch]->down_buf_level; ++idx) { uint16_t val; ipdbgJTAGtransfer(chain, &val, channel_contexts[ch]->down_buf[idx] | channel_contexts[ch]->valid_mask); transfers++; distribute_to_up_buffer(val, channel_contexts); } channel_contexts[ch]->down_buf_level = 0; } for(size_t k = transfers ; k < MIN_TRANSFERS ; ++k) { uint16_t val; ipdbgJTAGtransfer(chain, &val, 0x000); distribute_to_up_buffer(val, channel_contexts); } rv = apr_pollset_poll(pollset, DEF_POLL_TIMEOUT, &num, &ret_pfd); if (rv == APR_SUCCESS) { int i; /* scan the active sockets */ for (i = 0; i < num; i++) { serv_ctx_t *serv_ctx = ret_pfd[i].client_data; if(serv_ctx) { if (serv_ctx->channel_state == listening) { apr_socket_t *listening_sock = ret_pfd[i].desc.s; /* the listen socket is readable. that indicates we accepted a new connection */ do_accept(serv_ctx, pollset, listening_sock, mp); apr_socket_close(listening_sock); apr_pollset_remove(pollset, &ret_pfd[i]); } else { int ret = TRUE; if(ret_pfd[i].rtnevents & (APR_POLLIN | APR_POLLHUP)) { ret = connection_rx_cb(serv_ctx, pollset, ret_pfd[i].desc.s); } else // (ret_pfd[i].rtnevents & APR_POLLOUT) { ret = connection_tx_cb(serv_ctx, pollset, ret_pfd[i].desc.s); } if (ret == FALSE) { printf("closing connection %d", serv_ctx->channel_number); apr_socket_t *sock = ret_pfd[i].desc.s; apr_socket_close(sock); apr_pollset_remove(pollset, &ret_pfd[i]); apr_socket_t *listening_sock = create_listen_sock(mp, serv_ctx->channel_number); serv_ctx->channel_state = listening; apr_pollfd_t pfd = { mp, APR_POLL_SOCKET, APR_POLLIN, 0, { NULL }, serv_ctx }; pfd.desc.s = listening_sock; apr_pollset_add(pollset, &pfd); } } } } } } return 0; }