static ER get_tcp_cep (ID *cepid) { ID tskid; T_TCP_CCEP ccep; get_tid(&tskid); ccep.cepatr = UINT_C(0); ccep.sbufsz = TCP_ECHO_SRV_SWBUF_SIZE; ccep.rbufsz = TCP_ECHO_SRV_RWBUF_SIZE; #ifdef TCP_CFG_SWBUF_CSAVE ccep.sbuf = NADR; #else ccep.sbuf = tcp_echo_srv_swbuf; #endif #ifdef TCP_CFG_RWBUF_CSAVE ccep.rbuf = NADR; #else ccep.rbuf = tcp_echo_srv_rwbuf; #endif #ifdef USE_TCP_NON_BLOCKING ccep.callback = (FP)callback_nblk_tcp_echo_srv; #else ccep.callback = NULL; #endif return alloc_tcp_cep(cepid, tskid, &ccep); }
static ER get_tcp_rep (ID *repid) { ID tskid; T_TCP_CREP crep; get_tid(&tskid); crep.repatr = UINT_C(0); crep.myaddr.portno = UINT_C(7); #if defined(SUPPORT_INET4) crep.myaddr.ipaddr = IPV4_ADDRANY; #endif #if defined(SUPPORT_INET6) memcpy(&crep.myaddr.ipaddr, &ipv6_addrany, sizeof(T_IN6_ADDR)); #endif return alloc_tcp_rep(repid, tskid, &crep); }
static ER get_tcp_cep (ID *cepid) { ID tskid; T_TCP_CCEP ccep; get_tid(&tskid); ccep.cepatr = UINT_C(0); ccep.sbuf = NADR; ccep.sbufsz = 0; ccep.rbufsz = TCP_DISCARD_SRV_RWBUF_SIZE; ccep.callback = NULL; #ifdef TCP_CFG_RWBUF_CSAVE ccep.rbuf = NADR; #else ccep.rbuf = tcp_discard_srv_rwbuf; #endif return alloc_tcp_cep(cepid, tskid, &ccep); }
void udp_echo_cli_task (intptr_t exinf) { static char msg[sizeof(MESSAGE_FORMAT)] = MESSAGE_FORMAT; T_IN_ADDR addr; ID tskid, cepid; ER error = E_OK; char *line, *p; int_t rep; uint32_t count, msgno; uint16_t portno; #ifdef USE_UDP_EXTENTIONS T_UDP_CCEP ccep; #endif /* of #ifdef USE_UDP_EXTENTIONS */ get_tid(&tskid); syslog(LOG_NOTICE, "[UDP ECHO CLI:%d,%d] started.", tskid, (ID)exinf); while (true) { if (rcv_dtq(DTQ_UDP_ECHO_CLI, (intptr_t*)&line) == E_OK) { #ifdef USE_UDP_EXTENTIONS ccep.cepatr = UINT_C(0); ccep.myaddr.portno = UDP_PORTANY; #if defined(SUPPORT_INET4) ccep.myaddr.ipaddr = IPV4_ADDRANY; #endif #if defined(SUPPORT_INET6) memcpy(&ccep.myaddr.ipaddr, &ipv6_addrany, sizeof(T_IN6_ADDR)); #endif #ifdef USE_UDP_NON_BLOCKING ccep.callback = (FP)callback_nblk_udp_echo_cli; #else ccep.callback = NULL; #endif if ((error = alloc_udp_cep(&cepid, tskid, &ccep)) != E_OK) { syslog(LOG_NOTICE, "[UEC:%02d TSK] CEP create error: %s", cepid, itron_strerror(error)); continue; } #else /* of #ifdef USE_UDP_EXTENTIONS */ cepid = (ID)exinf; #endif /* of #ifdef USE_UDP_EXTENTIONS */ line = skip_blanks(GET_IPADDR(&addr, skip_blanks(line))); /* IP Address */ if ('0' <= *line && *line <= '9') { /* Port No */ line = get_int(&rep, line); portno = (uint16_t)rep; } else { line ++; portno = ECHO_SRV_PORTNO; } line = skip_blanks(line); if ('0' <= *line && *line <= '9') { /* Repeat */ line = get_int(&rep, line); if (rep > 1000000) rep = 1000000; udp_echo_cli_valid = true; for (count = 0; count ++ < rep; ) { if (!udp_echo_cli_valid) { syslog(LOG_NOTICE, "[UEC:%02d TSK] canceled.", cepid); break; } p = &msg[sizeof(MESSAGE_FORMAT)] - 1; for (msgno = count; msgno > 0; msgno /= 10) *(-- p) = msgno % 10 + '0'; while (*(p - 2) != 'G') *(-- p) = ' '; if ((error = send_udp_echo(cepid, &addr, portno, msg)) != E_OK) break; dly_tsk(10 * SYSTIM_HZ + net_rand() % (10 * SYSTIM_HZ)); } } else /* Single Message */ error = send_udp_echo(cepid, &addr, portno, line); if (error != E_OK) syslog(LOG_NOTICE, "[UEC:%02d TSK] error: %s", cepid, itron_strerror(error)); #ifdef USE_UDP_EXTENTIONS if ((error = free_udp_cep(cepid, !(error == E_NOEXS || error == E_DLT))) != E_OK) syslog(LOG_NOTICE, "[UEC:%02d TSK] CEP delete error: %s", cepid, itron_strerror(error)); #endif /* of #ifdef USE_UDP_EXTENTIONS */ } } }
static T_TCP_CEP *tcp_timers (T_TCP_CEP *cep, int_t tix); #if defined(NUM_TCP_TW_CEP_ENTRY) && NUM_TCP_TW_CEP_ENTRY > 0 static void tcp_tw_timo (void); #endif /* of #if defined(NUM_TCP_TW_CEP_ENTRY) && NUM_TCP_TW_CEP_ENTRY > 0 */ /* * バックオフ時間 * * 再送を行うたびに、タイムアウトの時間を延長する。 */ const static uint8_t tcp_back_off[] = { UINT_C(1), UINT_C(2), UINT_C(4), UINT_C(8), UINT_C(16), UINT_C(32), UINT_C(64), UINT_C(64), UINT_C(64), UINT_C(64), UINT_C(64), UINT_C(64), UINT_C(64) }; #define TCP_TOTAL_BACK_OFF 511 /* バックオフ時間の合計 */ /* * tcp_timers -- タイムアウト処理 */ static T_TCP_CEP * tcp_timers (T_TCP_CEP *cep, int_t tix) { uint16_t win;