void konlite_call(void) { unsigned short tmp; k_tmr++; for(tmp=0;tmp<ETH_RXBUFNB;tmp++) { buf = get_mac_data(tmp); // буфер принятых данных if(buf->len) { m_pkt=get_mac_pkt(buf); // формирование структуры мак пакета if(check_mac(m_pkt)) // проверка мак адреса назначения { switch(get_eth_type(m_pkt)) { case IP_TYPE: ip_p=ip_rcv(m_pkt); if(check_ip_req(ip_p)) { if(check_mask(ip_p->ip_s)==0) {set_gate_cmd();} // запрос выходит за рамки подсети else{clr_gate_cmd();add_arp_tab(ip_p->ip_s,m_pkt->mac_s);} // запрос в пределах подсети switch(get_ip_type(ip_p)) { case ICMP_TYPE: icmp_p=icmp_rcv(ip_p); if(check_ping(icmp_p)) {ping_echo(icmp_p,ip_p);} break; case UDP_TYPE: udp_p=udp_rcv(ip_p); portudp_scan(udp_p,ip_p); break; case TCP_TYPE: tcp_p=tcp_rcv(ip_p); porttcp_scan(tcp_p,ip_p); break; } } break; case ARP_TYPE: arp_p=arp_rcv(m_pkt); // формирование структуры arp пакета if(check_arp_req(arp_p)) // arp запрос { add_arp_tab(arp_p->ip_s,arp_p->mac_s); arp_answer(arp_p); }else if(check_arp_answer_gate(arp_p)) // arp ответ от шлюза { set_gate_mac(arp_p->mac_s); } break; case UNDEF_TYPE: break; } } unlock_mac_rx(tmp); } } if(k_tmr % GATE_PER == 0) get_gate_mac(); // периодический запрос mac шлюза }
void msg_shell(const char * command){ unsigned char mac[6]; int size,length; size = check_mac(command, mac); if ( size == -1 ){ printf("La direccion mac es incorrecta.\n"); return; } length = strlen(command + size + 1); _send_message(mac,command + size + 1,length); }
struct mac_response perform_mac (int fd, struct mac_mode_encoding m, unsigned int data_slot, struct octet_buffer challenge) { const unsigned int recv_len = 32; struct mac_response rsp = {0}; rsp.status = false; uint8_t param1 = serialize_mac_mode (m); uint8_t param2[2] = {0}; assert (data_slot <= MAX_NUM_DATA_SLOTS); if (!m.use_second_32_temp_key) assert (NULL != challenge.ptr && recv_len == challenge.len); /* Param 2 is guaranteed to be less than 15 (check above) */ param2[0] = data_slot; param2[1] = 0; rsp.mac = make_buffer (recv_len); struct Command_ATSHA204 c = make_command (); set_opcode (&c, COMMAND_MAC); set_param1 (&c, param1); set_param2 (&c, param2); /* TODO Fix for situations not sending the challlenge */ set_data (&c, challenge.ptr, challenge.len); set_execution_time (&c, 0, MAC_AVG_EXEC); if (RSP_SUCCESS == process_command (fd, &c, rsp.mac.ptr, recv_len)) { /* Perform a check mac to ensure we have the data correct */ rsp.meta = get_check_mac_meta_data (fd, m, data_slot); struct check_mac_encoding cm = {0}; rsp.status = check_mac (fd, cm, data_slot, challenge, rsp.mac, rsp.meta); } else { free_octet_buffer (rsp.mac); } return rsp; }
int Do_Transfer(BANK_TRANS_REQUEST *pBankTrans) { //char buffer[20]=""; char temp[128]=""; int ho_OpCount=0; int delay_time=0; double ho_Fee_Change=0; int ret=0; FILE *fp; TIniFile tf; int nrows=0; char path_name[128]=""; char file_name[128]=""; BANK_TRANSFER_HEAD trans_head; BANK_TRANSFER_RECORD trans_record; T_v_tif_shopdeptfee v_shopdeptfee; T_t_cif_shop t_shop; //系统正在结算,可以生成划拨文件 //sleep(1); //ret=DB_v_tif_shopdeptfee_read_sum_fee(&ho_OpCount,&ho_Fee_Change); if(ret) { writelog(LOG_ERR,"DB_v_tif_shopdeptfee_read_sum_fee err [%d]",ret); return ret; } ho_OpCount=4; ho_Fee_Change=12345.98; strcpy(path_name,"/ykt/ykt/src/bank/ftp"); sprintf(file_name,"%s/fd_%8.8s",path_name,getsysdate(NULL)); #ifdef DEBUG // strcpy(path_name,"./ftp/fd_20041009"); writelog(LOG_ALERT,"file_name2=[%s]",file_name); #endif fp = fopen(file_name,"wb"); if (fp==NULL) { writelog(LOG_ALERT,"Open indicate file fail"); return -1; } memcpy(trans_head.rmb_batch_no,BATCH_NO,sizeof(trans_head.rmb_batch_no)); fprintf(fp,"%-14.14s",trans_head.rmb_batch_no); //批量编号 memcpy(trans_head.rmb_start_seq,"000000",6); fprintf(fp,"%-6.6s",trans_head.rmb_start_seq); //填000000 trans_head.rmb_acc_status='0'; fprintf(fp,"%c",trans_head.rmb_acc_status); //记帐状态(填0) trans_head.rmb_chk_status='2'; fprintf(fp,"%c",trans_head.rmb_chk_status); //检查状态(填2) sprintf(trans_head.rmb_total_amount,"%-13d",int(ho_Fee_Change*100)); fprintf(fp,"%-13.13s",trans_head.rmb_total_amount); //总金额(11位整数2位小数,无小数点) sprintf(trans_head.rmb_total_num,"%-6d",ho_OpCount); fprintf(fp,"%-6.6s",trans_head.rmb_total_num); //总笔数 fprintf(fp,"%-13.13s",trans_head.rmb_enter_amount); //入帐金额 fprintf(fp,"%-6.6s",trans_head.rmb_enter_num); //入帐笔数 sprintf(trans_head.rmb_unit_name,"%-40s",UNIT_NAME); fprintf(fp,"%-40.40s",trans_head.rmb_unit_name); //单位名称 #ifdef DEBUG writelog(LOG_ALERT,"trans_head.rmb_unit_name=[%s]",trans_head.rmb_unit_name); #endif strcpy(trans_head.rmb_unit_account,UNIT_ACCOUNT); //sprintf(trans_head.rmb_unit_account,"%-20s"UNIT_ACCOUNT); fprintf(fp,"%-20.20s",trans_head.rmb_unit_account); //单位帐号 #ifdef DEBUG writelog(LOG_ALERT,"trans_head.rmb_unit_account=[%s]",trans_head.rmb_unit_account); #endif memcpy(trans_head.rmb_apply_date,getsysdate(NULL),sizeof(trans_head.rmb_apply_date)); fprintf(fp,"%-8.8s",trans_head.rmb_apply_date); //申请入帐日期(当天日期) //memcpy(trans_head.rmb_send_date,trans_head.rmb_apply_date,sizeof(trans_head.rmb_apply_date)); memcpy(trans_head.rmb_send_date,getsystime(NULL),sizeof(trans_head.rmb_send_date)); fprintf(fp,"%-8.8s",trans_head.rmb_send_date); //上传日期(当天日期) #ifdef DEBUG printf("[%14.14s]\n",trans_head.rmb_batch_no ); //批量编号 printf("[%6.6s]\n",trans_head.rmb_start_seq ); //填000000 printf("[%c]\n",trans_head.rmb_acc_status ); //记帐状态(填0) printf("[%c]\n",trans_head.rmb_chk_status ); //检查状态(填2) printf("[%13.13s]\n",trans_head.rmb_total_amount ); //总金额(11位整数2位小数,无小数点) printf("[%6.6s]\n",trans_head.rmb_total_num ); //总笔数 printf("[%13.13s]\n",trans_head.rmb_enter_amount ); //入帐金额(11位整数2位小数,无小数点) printf("[%6.6s]\n",trans_head.rmb_enter_num ); //入帐笔数 printf("[%40.40s]\n",trans_head.rmb_unit_name ); //单位名称 printf("[%20.20s]\n",trans_head.rmb_unit_account ); //单位帐号 printf("[%8.8s]\n",trans_head.rmb_apply_date ); //申请入帐日期(当天日期) printf("[%8.8s]\n",trans_head.rmb_send_date ); //上传日期(当天日期) #endif //写入划拨文件 // fprintf(fp,(char*)(&trans_head)); strcpy(temp,"1"); ret=DB_v_tif_shopdeptfee_open_select_by_c6_and_is_indep(temp); if(ret) { //db_chk_err(__FILE__,__LINE__,&sqlca); writelog(LOG_ALERT,"DB_v_tif_shopdeptfee_open_select_by_c6_and_is_indep[%d]",ret); return ret; } while(1) { //初始化宿主变量 ho_Fee_Change=0; memset(&v_shopdeptfee,0,sizeof(v_shopdeptfee)); memset(&t_shop,0,sizeof(t_shop)); ret=DB_v_tif_shopdeptfee_fetch_select_by_c6(&v_shopdeptfee); if(ret) { if(DB_NOTFOUND==ret) { if(0==nrows) { writelog(LOG_ERR,"DB_v_tif_shopdeptfee_fetch_select_by_c6[%d]",ret); break; } else break; //循环记录结束 } else { //db_chk_err(__FILE__,__LINE__,&sqlca); writelog(LOG_ERR,"DB_v_tif_shopdeptfee_fetch_select_by_c6[%d]",ret); return ret; } } ret=DB_t_cif_shop_read_by_shop_id(v_shopdeptfee.shop_id,&t_shop); if(ret) { //db_chk_err(__FILE__,__LINE__,&sqlca); writelog(LOG_ALERT,"DB_t_cif_shop_read_by_shop_id[%d]",ret); return ret; } strcpy(trans_record.rmb_batch_no1,BATCH_NO); sprintf(trans_record.rmb_seq_no,"%d",nrows); trans_record.rmb_acc_status1='0'; trans_record.rmb_tran_kind='2'; strncpy(trans_record.rmb_cust_name,t_shop.b_act_name,sizeof(trans_record.rmb_cust_name)); strncpy(trans_record.rmb_acc_no,t_shop.b_act_id,sizeof(trans_record.rmb_acc_no)); trans_record.rmb_cb_cr='0'; sprintf(trans_record.rmb_tran_amt,"%f",ho_Fee_Change); strcpy(trans_record.rmb_cur_code,"001"); strcpy(trans_record.rmb_host_no,"00000000"); memcpy(trans_record.rmb_ret_code," ",sizeof(trans_record.rmb_ret_code)); strcpy(trans_record.rmb_acc_date,"00000000"); strcpy(trans_record.rmb_host_no1,"000000000"); strcpy(trans_record.rmb_open_branch,"0000000"); memcpy(trans_record.rmb_vcho_kind," ",sizeof(trans_record.rmb_vcho_kind)); strcpy(trans_record.rmb_vcho_bat_no,"00"); strcpy(trans_record.rmb_vcho_no,"000000000"); strcpy(trans_record.rmb_memo," "); strcpy(trans_record.rmb_tran_info," "); fprintf(fp,(char*)(&trans_record)); nrows++; } fclose(fp); memset(pBankTrans,0,BANK_TRANS_PACKLEN); //开始银行发送清算报文 memcpy( pBankTrans->TradeCode,TRADE_BANK_BALANCE, sizeof(pBankTrans->TradeCode)); //写交易代码 //写交易日期和交易时间 getsysdate(pBankTrans->TradeDate); getsystime(pBankTrans->TradeTime); //写院校代码 sprintf(pBankTrans->CustNo,"%-16s",SCHOOL_CODE); //写银行卡号-此处约定为划拨文件名 sprintf(pBankTrans->BankCardNo,"%8.8s",getsysdate(NULL)); //写校验mac码 //写校验mac码----林钦此处应该用银行回传回来的动态密钥做mac密钥,此处改过来了 generate_mac((char*)pBankTrans,sizeof(pBankTrans),pBankTrans->MAC); //ANSIX99(mac_key,(char*)(&BankTransPak), BANK_TRANS_PACKLEN-LEN_MAC,BankTransPak.MAC); TRACE_BANK_TRANS(pBankTrans,"send transfer package"); //发送数据到银行并同时接收银行数据,此处不判断返回的mac校验 ret=send_to_and_recv_from_bank((char*)pBankTrans,BANK_TRANS_PACKLEN, (char*)pBankTrans,BANK_TRANS_PACKLEN,delay_time); if(ret) { writelog(LOG_ERR,"send_to_and_recv_from_bank error,errcode=[%d]",ret); return E_TRANS_BANK_NOANSWER; } TRACE_BANK_TRANS(pBankTrans,"recv transfer package"); //农行暂时未校验该mac,所以暂时屏蔽掉 ret=check_mac((char*)pBankTrans,BANK_TRANS_PACKLEN); if(ret) { writelog(LOG_ERR,"Receive data mac verify error,error code is [%d] ",ret); //sprintf(pNode->RetCode,"%d",E_TRANS_BANK_RECVERR); return E_TRANS_BANK_RECVERR; } writelog(LOG_INFO,"Congratulation, transer succeed!"); return 0; }