Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <netdb.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <sys/select.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <pthread.h>
- #include <enet/enet.h>
- #include <fcntl.h>
- #include <net/route.h>
- #include <enet_flash.h>
- #ifndef ENET_AGENTD_PORT
- #define ENET_AGENTD_PORT 13364
- #endif
- extern int admin_site_survey(SITESURVEY *sites);
- extern int get_ap_info(WLANINFO *wlaninfo);
- extern int enet_avs_msg_port;
- extern int enet_disable_all_leds;
- extern int g_link_status;
- extern int has_no_wireless;
- #ifdef ENET_SUPPORT_WLAN
- extern int getRegionCountryNum(int a, int b);
- #endif
- extern void enet_form_set_date_time(int year,int mon,int day,int hour,int min,int sec);
- extern void enet_set_essid_any();
- extern void enet_restore_essid();
- void getRegionCountryRange(int cr, int *a, int *b);
- int saveCountryRegionFlash(int CountryRegion);
- int saveMACFlash(unsigned char *mac);
- static unsigned char mynodeid[6];
- static pthread_t ledctl_handle;
- static inline u8 atoh(char c)
- {
- unsigned x;
- switch (c) {
- case 'F': case 'f': return 15;
- case 'E': case 'e': return 14;
- case 'D': case 'd': return 13;
- case 'C': case 'c': return 12;
- case 'B': case 'b': return 11;
- case 'A': case 'a': return 10;
- }
- x = c - '0';
- return (x >= 0 && x <= 9) ? x : 0;
- }
- static int check_tcpcfg(TCPCFG *cfg)
- {
- unsigned char nodenum[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
- if (!memcmp(cfg->NodeID, nodenum, 6) || !memcmp(cfg->NodeID, mynodeid, 6)) {
- if (cfg->edicfg[3] + cfg->edicfg[1] == cfg->edicfg[2] && cfg->edicfg[0] == 0)
- return 1;
- else
- return 0;
- }
- else
- return 0;
- }
- static void SetTCPCfgPkt(TCPCFG *cfg, unsigned char command, unsigned char *nodenum)
- {
- bzero(cfg, sizeof(TCPCFG));
- memcpy(cfg->NodeID, nodenum, 6);
- cfg->edicfg[0] = RESPONSE;
- cfg->edicfg[1] = command;
- cfg->edicfg[2] = 0xff;
- cfg->edicfg[3] = 0xff - command;
- }
- static void Set_IC_NAME(IC_NAME *ic, enet_t *enet)
- {
- int a, b;
- in_addr_t ip;
- bzero(ic, sizeof(IC_NAME));
- memcpy(ic->IC_Name, enet->model_name, sizeof(enet->model_name));
- //memcpy(ic->IC_IP, &enet->lan.ip, sizeof(in_addr_t));
- memset(ic->IC_IP, 0, sizeof(ic->IC_IP));
- if (enet_get_ip(ENET_LAN_BRIDGE, &ip) > 0)
- memcpy(ic->IC_IP, &ip, sizeof(in_addr_t));
- #ifdef ENET_SUPPORT_WLAN
- getRegionCountryRange(enet->wl_g.CountryRegion, &a, &b);
- #endif
- ic->IC_Reserved0[0] = a; // Tester: Wireless Channel a-b
- ic->IC_Reserved0[1] = b; // Tester: Wireless Channel a-b
- ic->IC_Reserved0[2] = FIRMWARE_VERSION_A; // Tester: Firmware Version A.B
- ic->IC_Reserved0[3] = FIRMWARE_VERSION_B; // Tester: Firmware Version A.B
- ic->IC_VendorID = enet->model; // Tester: Model (0:Edmiax 1:GLP 2:DDC 3:ICT) (in enet.h)
- ic->IC_SubVendorID = enet->type; // Tester: Type (0:IC1000 1:IC1000WG 2:IC3000, 3:IC3000WG 6:IC1500 7:IC1500WG 8:IC1500S)
- ic->IC_DeviceType = IC_DeviceType_IPCamera; // Admin:
- ic->IC_DeviceModel = enet->type + 1; // Admin: IC_DeviceModel_IC1500WG;
- ic->IC_Setted = enet->IC_Setted;
- //memcpy(ic->IC_Reserved1, "5678", 4); //
- //ic->IC_Reserved1[0] = 4;
- //ic->IC_Reserved1[1] = 5;
- //ic->IC_Reserved1[2] = 6;
- //ic->IC_Reserved1[3] = 7;
- }
- static void Set_IC_SETTING(IC_SETTING *icsetting, enet_t *enet)
- {
- char tmp[32];
- char firmware_version[5]={0,0,0,0,0};
- in_addr_t netmask;
- struct in_addr gw;
- in_addr_t dns;
- memcpy(icsetting->email, enet->email.rcpt, 32); //enet_smtp.h : #define MAX_EMAIL_LEN 64
- memcpy(icsetting->emailserver, &enet->email.server, 32); icsetting->emailserver[31] = 0;
- memcpy(icsetting->IC_SUBNET, &enet->lan.mask, sizeof(in_addr_t));
- memcpy(icsetting->IC_GATEWAY, &enet->lan.gateway, sizeof(in_addr_t));
- memcpy(icsetting->IC_DNS, &enet->dns1, sizeof(in_addr_t));
- icsetting->IC_PORT = htons(enet_avs_msg_port);
- icsetting->IC_WEB_PORT = htons(enet->httpd_port);
- if (enet->avs.video.width == 640 && enet->avs.video.height == 480)
- {
- icsetting->IC_Resolution = 3;
- }
- else if (enet->avs.video.width == 320 && enet->avs.video.height == 240)
- {
- icsetting->IC_Resolution = 2;
- }
- sscanf(enet_firmware_version(), "%s %s", firmware_version, tmp);
- memcpy(icsetting->IC_FirmwareVer, firmware_version, 5);
- //memcpy(icsetting->IC_Password, enet->passwd, 5); obsolete
- strncpy(icsetting->IC_LongPassword, enet->passwd, IPCAM_PASSWD_LEN);
- icsetting->IC_DDNS_ENABLE = (int) enet->ddns.enable;
- memcpy(icsetting->IC_DDNS_DOMAIN, enet->ddns.host, 32); icsetting->IC_DDNS_DOMAIN[32] = 0;
- memcpy(icsetting->IC_DDNS_ACCOUNT, enet->ddns.login, 0x11);
- memcpy(icsetting->IC_DDNS_PASSWORD, enet->ddns.passwd, 0x11);
- icsetting->IC_UPNP_ENABLE = (int) enet->upnp_enable;
- memcpy(icsetting->IC_Name, enet->model_name, sizeof(enet->model_name)); //enet:32
- icsetting->IC_DHCP_ENABLE = (int) enet->lan.dhcp_enable;
- icsetting->IC_PPPOE_ENABLE = (int) enet->pppoe.enable;
- #if defined AGENTED_SUPPORT_MD
- icsetting->m_IC_MD_3010.IC_MD_enable = enet->avs.md.enable;
- //enet_debug("enet.avs.md.enable is %d",icsetting->IC_MD_enable);
- icsetting->m_IC_MD_3010.IC_MD_email = enet->avs.md.email;
- icsetting->m_IC_MD_3010.IC_MD_ftp = enet->avs.md.ftp;
- memcpy(icsetting->m_IC_MD_3010.IC_MD_title , enet->avs.md.title , MAX_TITLE_LEN-1 );
- icsetting->m_IC_MD_3010.IC_MD_title[MAX_TITLE_LEN-1] = '\0';
- icsetting->m_IC_MD_3010.IC_MD_length = htonl(enet->avs.md.length);
- // enet_debug("icsetting->IC_MD_length is %d",icsetting->IC_MD_length);
- // enet_debug("enet->avs.md.length is %d",enet->avs.md.length);
- icsetting->m_IC_MD_3010.IC_MD_delay = htonl(enet->avs.md.delay);
- // icsetting->IC_MD_delay = enet->avs.md.delay;
- // enet_debug("icsetting->IC_MD_delay is %d",icsetting->IC_MD_delay);
- // enet_debug("enet->avs.md.delay is %d",enet->avs.md.delay);
- #endif
- }
- static void Set_MyNodeID()
- {
- enet_t enet;
- enet_load(&enet);
- memcpy(mynodeid, enet.lan.mac, 6);
- }
- static void dispatch(unsigned char *buf, int buf_len, int sock, struct sockaddr_in *agentd_svr)
- {
- enet_t enet;
- TCPCFG cfg, cfgret;
- IC_NAME ic;
- IC_SETTING icsetting;
- IC_CONFIG icconfig;
- WLANINFO wlaninfo;
- SITESURVEY sites[20];
- IC_LED icled;
- unsigned char cmd;
- unsigned char send_buf[1024], tmpbuf[64];
- char tftp_cmd[128];
- int ap_num = 0, i;
- int rval, need_reboot = 0;
- unsigned char CountryRegion = 0;
- static unsigned char need_save = 0; // in order to save time, we only save setting to flash when need_save is 1.
- EMAIL_AUTH email_auth;
- FTP_SETTING ftp;
- PPPOE_SETTING pppoe;
- TEST_EMAIL testmail;
- USERS users;
- DATETIME datetime;
- //struct in_addr ntp_addr;
- int WepKeyLen = 0;
- enet_runtime_t *rt;
- char *userid = NULL; //for user account management
- //enet_debug("UDP packet from %s (port:%d)", inet_ntoa(agentd_svr->sin_addr), ntohs(agentd_svr->sin_port));
- rval = 0;
- memcpy(&cfg, buf, sizeof(cfg));
- if (check_tcpcfg(&cfg)){
- cmd = cfg.edicfg[1];
- enet_load(&enet);
- bzero(send_buf, 1024);
- switch (cmd) {
- case RESET :
- enet_debug("recv cmd: %d RESET", cmd);
- system("/sbin/reboot");
- break;
- case READ_SETTING :
- agentd_svr->sin_addr.s_addr = INADDR_BROADCAST;
- case READ_SETTING_MANUAL :
- //if (agentd_svr->sin_addr.s_addr == INADDR_BROADCAST)
- // enet_debug("recv cmd: %d READ_SETTING", cmd);
- //else
- // enet_debug("recv cmd: %d READ_SETTING_MANUAL", cmd);
- bzero(&icsetting, sizeof(IC_SETTING));
- Set_IC_SETTING(&icsetting, &enet);
- //enet_debug("enet.passwd:%s", enet.passwd);
- SetTCPCfgPkt(&cfgret, cmd, mynodeid);
- memcpy(send_buf, &cfgret, sizeof(TCPCFG));
- memcpy(send_buf + sizeof(TCPCFG), &icsetting, sizeof(IC_SETTING));
- sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(IC_SETTING), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in)); //server maxinum only read 1024 bytes!
- usleep(10000);
- sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(IC_SETTING), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in)); //server maxinum only read 1024 bytes!
- usleep(10000);
- sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(IC_SETTING), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in)); //server maxinum only read 1024 bytes!
- break;
- case SET_CONFIG :
- /*
- neo@acelink 2008/09/11: Apply to new Admin utility
- */
- //enet_debug("recv cmd: %d SET_CONFIG", cmd);
- bzero(&icconfig, sizeof(IC_CONFIG));
- memcpy(&icconfig, buf, sizeof(IC_CONFIG));
- /* save configutation */
- memcpy(enet.model_name, icconfig.IC_Name, sizeof(enet.model_name)); // enet: 32
- strncpy(enet.passwd, icconfig.IC_LongPassword, IPCAM_PASSWD_LEN);
- umSetUserPassword((char *) enet.login, (char *) enet.passwd); // for httpd server
- enet.lan.dhcp_enable = (bool) icconfig.IC_DHCP_ENABLE;
- if (!enet.lan.dhcp_enable) {
- memcpy(&enet.lan.ip, icconfig.IC_IP, sizeof(in_addr_t));
- memcpy(&enet.lan.mask, icconfig.IC_SUBNET, sizeof(in_addr_t));
- memcpy(&enet.lan.gateway, icconfig.IC_GATEWAY, sizeof(in_addr_t));
- memcpy(&enet.dns1, icconfig.IC_DNS, sizeof(in_addr_t));
- }
- enet.IC_Setted = 1;
- need_reboot = 0;
- if (enet.httpd_port != ntohs(icconfig.IC_WEB_PORT))
- need_reboot = 1;
- enet.httpd_port = ntohs(icconfig.IC_WEB_PORT);
- if (need_reboot == 1) {
- enet_save_apply(&enet);
- enet_reboot();
- }
- enet_save_apply(&enet);
- //alert admin refresh info
- cmd = READ_SETTING;
- bzero(&icsetting, sizeof(IC_SETTING));
- Set_IC_SETTING(&icsetting, &enet);
- SetTCPCfgPkt(&cfgret, cmd, mynodeid);
- memcpy(send_buf, &cfgret, sizeof(TCPCFG));
- memcpy(send_buf + sizeof(TCPCFG), &icsetting, sizeof(IC_SETTING));
- agentd_svr->sin_addr.s_addr = INADDR_BROADCAST;
- sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(IC_SETTING), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in)); //server maxinum only read 1024 bytes!
- usleep(10000);
- sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(IC_SETTING), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in)); //server maxinum only read 1024 bytes!
- usleep(10000);
- sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(IC_SETTING), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in)); //server maxinum only read 1024 bytes!
- break;
- case SEARCH_IPCAM :
- agentd_svr->sin_addr.s_addr = INADDR_BROADCAST;
- case SEARCH_MANUAL :
- //if (agentd_svr->sin_addr.s_addr == INADDR_BROADCAST)
- // enet_debug("recv cmd: %d SEARCH_IPCAM", cmd);
- //else
- // enet_debug("recv cmd: %d SEARCH_MANUAL", cmd);
- Set_IC_NAME(&ic, &enet);
- SetTCPCfgPkt(&cfgret, cmd, mynodeid);
- memcpy(send_buf, &cfgret, sizeof(TCPCFG));
- memcpy(send_buf + sizeof(TCPCFG), &ic, sizeof(IC_NAME));
- sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(IC_NAME), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in)); //server maxinum only read 1024 bytes!
- usleep(10000);
- sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(IC_NAME), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in)); //server maxinum only read 1024 bytes!
- usleep(10000);
- sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(IC_NAME), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in)); //server maxinum only read 1024 bytes!
- if (need_save == 1) {
- //enet_debug("save setting.....");
- need_save = 0;
- enet_save_apply(&enet);
- }
- break;
- case FIRMWARE_UPGRADE :
- enet_debug("recv cmd: %d FIRMWARE_UPGRADE", cmd);
- enet_attach_runtime((void**)&rt);
- enet_avs_src_stop(&rt->avs_svr.src);
- enet_avs_ctl_stop(&rt->avs_svr.ctl);
- enet_detach_runtime((void**)&rt);
- sprintf(tftp_cmd, "/usr/bin/tftp get %s:newimg.bin", inet_ntoa(agentd_svr->sin_addr));
- system(tftp_cmd);
- enet_reboot();
- break;
- case FACTORY_DEFAULT :
- enet_debug("recv cmd: %d FACTORY_DEFAULT", cmd);
- enet_reset();
- break;
- #ifdef ENET_SUPPORT_WLAN
- case GETWLAN_COMMAND :
- agentd_svr->sin_addr.s_addr = INADDR_BROADCAST;
- case GETWLAN_COMMAND_MANUAL :
- //if (agentd_svr->sin_addr.s_addr == INADDR_BROADCAST)
- // enet_debug("recv cmd: %d GETWLAN_COMMAND", cmd);
- //else
- // enet_debug("recv cmd: %d GETWLAN_COMMAND_MANUAL", cmd);
- // ref enet_wireless.h
- bzero(&wlaninfo, sizeof(WLANINFO));
- memcpy(wlaninfo.SSID, enet.wl_g.ssid, 32);
- wlaninfo.SSID[32] = '\0';
- switch (enet.wl_g.auth)
- {
- case 0 : // None
- wlaninfo.auth_mode = 0;
- wlaninfo.Encryption = 0;
- break;
- case 1 : // Open
- wlaninfo.auth_mode = 1;
- if (enet.wl_g.encry == 0) // None
- wlaninfo.Encryption = 0;
- else if (enet.wl_g.encry == 1) // WEP
- {
- wlaninfo.Encryption = enet.wl_g.wep_keysize + 1;
- wlaninfo.Key_Format = 1 - enet.wl_g.wep_keytype;
- }
- break;
- case 2 : // Shared
- wlaninfo.auth_mode = 2;
- wlaninfo.Encryption = enet.wl_g.wep_keysize + 1;
- wlaninfo.Key_Format = 1 - enet.wl_g.wep_keytype;
- break;
- case 3 : // WPAPSK
- wlaninfo.auth_mode = 3;
- if (enet.wl_g.encry == 2)
- wlaninfo.Encryption = 3;
- else if (enet.wl_g.encry == 3)
- wlaninfo.Encryption = 4;
- break;
- case 4 : // WPA2PSK
- wlaninfo.auth_mode = 4;
- if (enet.wl_g.encry == 2)
- wlaninfo.Encryption = 3;
- else if (enet.wl_g.encry == 3)
- wlaninfo.Encryption = 4;
- break;
- case 5 : // WPANone
- wlaninfo.auth_mode = 5;
- if (enet.wl_g.encry == 2)
- wlaninfo.Encryption = 3;
- else if (enet.wl_g.encry == 3)
- wlaninfo.Encryption = 4;
- break;
- }
- /*
- if (enet.wl_g.auth == 0 || (enet.wl_g.auth == 1 && enet.wl_g.encry == 0)) //( None or (Open&&None))
- wlaninfo.Encryption = 0;
- else
- wlaninfo.Encryption = (enet.wl_g.wep_keysize == WL_WEP_64_BITS) ? 1 : 2;
- */
- //enet_debug("Encryption:%d", wlaninfo.Encryption);
- wlaninfo.Key_Format = enet.wl_g.wep_keytype == 0 ? 1 : 0; // 0 : ASCII, 1: HEX (enet: 0:hex 1:ascii)
- wlaninfo.Default_Key = enet.wl_g.defkey;
- //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- if (enet.wl_g.wep_keysize == WL_WEP_64_BITS && enet.wl_g.wep_keytype == 1) { //ACSII 64 bit
- // Key 1
- sprintf(wlaninfo.Key[0], "%02X%02X%02X%02X%02X",
- enet.wl_g.wepkey1[0], enet.wl_g.wepkey1[1],enet.wl_g.wepkey1[2],enet.wl_g.wepkey1[3],enet.wl_g.wepkey1[4]);
- // Key 2
- sprintf(wlaninfo.Key[1], "%02X%02X%02X%02X%02X",
- enet.wl_g.wepkey2[0], enet.wl_g.wepkey2[1],enet.wl_g.wepkey2[2],enet.wl_g.wepkey2[3],enet.wl_g.wepkey2[4]);
- // Key 3
- sprintf(wlaninfo.Key[2], "%02X%02X%02X%02X%02X",
- enet.wl_g.wepkey3[0], enet.wl_g.wepkey3[1],enet.wl_g.wepkey3[2],enet.wl_g.wepkey3[3],enet.wl_g.wepkey3[4]);
- // Key 4
- sprintf(wlaninfo.Key[3], "%02X%02X%02X%02X%02X",
- enet.wl_g.wepkey4[0], enet.wl_g.wepkey4[1],enet.wl_g.wepkey4[2],enet.wl_g.wepkey4[3],enet.wl_g.wepkey4[4]);
- }
- if (enet.wl_g.wep_keysize == WL_WEP_128_BITS && enet.wl_g.wep_keytype == 1) { //ACSII 128 bit
- // Key 1
- sprintf(wlaninfo.Key[0], "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
- enet.wl_g.wepkey1[0], enet.wl_g.wepkey1[1],enet.wl_g.wepkey1[2],enet.wl_g.wepkey1[3],enet.wl_g.wepkey1[4],
- enet.wl_g.wepkey1[5], enet.wl_g.wepkey1[6],enet.wl_g.wepkey1[7],enet.wl_g.wepkey1[8],enet.wl_g.wepkey1[9],
- enet.wl_g.wepkey1[10], enet.wl_g.wepkey1[11],enet.wl_g.wepkey1[12]);
- // Key 2
- sprintf(wlaninfo.Key[1], "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
- enet.wl_g.wepkey2[0], enet.wl_g.wepkey2[1],enet.wl_g.wepkey2[2],enet.wl_g.wepkey2[3],enet.wl_g.wepkey2[4],
- enet.wl_g.wepkey2[5], enet.wl_g.wepkey2[6],enet.wl_g.wepkey2[7],enet.wl_g.wepkey2[8],enet.wl_g.wepkey2[9],
- enet.wl_g.wepkey2[10], enet.wl_g.wepkey2[11],enet.wl_g.wepkey2[12]);
- // Key 3
- sprintf(wlaninfo.Key[2], "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
- enet.wl_g.wepkey3[0], enet.wl_g.wepkey3[1],enet.wl_g.wepkey3[2],enet.wl_g.wepkey3[3],enet.wl_g.wepkey3[4],
- enet.wl_g.wepkey3[5], enet.wl_g.wepkey3[6],enet.wl_g.wepkey3[7],enet.wl_g.wepkey3[8],enet.wl_g.wepkey3[9],
- enet.wl_g.wepkey3[10], enet.wl_g.wepkey3[11],enet.wl_g.wepkey3[12]);
- // Key 4
- sprintf(wlaninfo.Key[3], "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
- enet.wl_g.wepkey4[0], enet.wl_g.wepkey4[1],enet.wl_g.wepkey4[2],enet.wl_g.wepkey4[3],enet.wl_g.wepkey4[4],
- enet.wl_g.wepkey4[5], enet.wl_g.wepkey4[6],enet.wl_g.wepkey4[7],enet.wl_g.wepkey4[8],enet.wl_g.wepkey4[9],
- enet.wl_g.wepkey4[10], enet.wl_g.wepkey4[11],enet.wl_g.wepkey4[12]);
- }
- if (enet.wl_g.wep_keysize == WL_WEP_64_BITS && enet.wl_g.wep_keytype == 0) { // HEX 64 bit
- memcpy(wlaninfo.Key[0], enet.wl_g.wepkey1, 10);
- memcpy(wlaninfo.Key[1], enet.wl_g.wepkey2, 10);
- memcpy(wlaninfo.Key[2], enet.wl_g.wepkey3, 10);
- memcpy(wlaninfo.Key[3], enet.wl_g.wepkey4, 10);
- }
- if (enet.wl_g.wep_keysize == WL_WEP_128_BITS && enet.wl_g.wep_keytype == 0) { // HEX 128 bit
- memcpy(wlaninfo.Key[0], enet.wl_g.wepkey1, 26);
- memcpy(wlaninfo.Key[1], enet.wl_g.wepkey2, 26);
- memcpy(wlaninfo.Key[2], enet.wl_g.wepkey3, 26);
- memcpy(wlaninfo.Key[3], enet.wl_g.wepkey4, 26);
- }
- /*
- enet_debug("enet key1:%s.", enet.wl_g.wepkey1);
- enet_debug("enet key2:%s.", enet.wl_g.wepkey2);
- enet_debug("enet key3:%s.", enet.wl_g.wepkey3);
- enet_debug("enet key4:%s.", enet.wl_g.wepkey4);
- enet_debug("wlaninfo.Key[0]:%s.", wlaninfo.Key[0]);
- enet_debug("wlaninfo.Key[1]:%s.", wlaninfo.Key[1]);
- enet_debug("wlaninfo.Key[2]:%s.", wlaninfo.Key[2]);
- enet_debug("wlaninfo.Key[3]:%s.", wlaninfo.Key[3]);
- */
- //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- memcpy(wlaninfo.WPA_KEY, enet.wl_g.wpakey, 64);
- wlaninfo.WPA_KEY[64] = 0;
- //check if already connected to AP
- get_ap_info(&wlaninfo);
- //enet_debug("wlaninfo.WPA_KEY:%s.", wlaninfo.WPA_KEY);
- if (enet.wl_g.enable == 0 || has_no_wireless) //wireless is disabled
- wlaninfo.Network_Type = 0;
- else
- wlaninfo.Network_Type = (enet.wl_g.mode == WL_MODE_STA_INFRA) ? 2 : 1;
- //enet_debug("wlaninfo.Network_Type:%d", wlaninfo.Network_Type);
- SetTCPCfgPkt(&cfgret, cmd, mynodeid);
- memcpy(send_buf, &cfgret, sizeof(TCPCFG));
- memcpy(send_buf + sizeof(TCPCFG), &wlaninfo, sizeof(WLANINFO));
- sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(WLANINFO), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in)); //server maxinum only read 1024 bytes!
- usleep(10000);
- sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(WLANINFO), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in)); //server maxinum only read 1024 bytes!
- usleep(10000);
- sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(WLANINFO), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in)); //server maxinum only read 1024 bytes!
- break;
- case SITESURVEY_COMMAND :
- agentd_svr->sin_addr.s_addr = INADDR_BROADCAST;
- case SITESURVEY_COMMAND_MANUAL :
- //if (agentd_svr->sin_addr.s_addr == INADDR_BROADCAST)
- // enet_debug("recv cmd: %d SITESURVEY_COMMAND", cmd);
- //else
- // enet_debug("recv cmd: %d SITESURVEY_COMMAND_MANUAL", cmd);
- /*
- STATUS_WLAN = 0,
- STATUS_LAN = 1
- */
- if (enet.wl_g.enable == 0 || g_link_status == 1) {
- enet_set_essid_any(); // modify configuration file
- //system("/sbin/ifconfig ra0 up"); obsoleted, admin doesn't user this command anymore
- }
- for (i = 0 ; i < 3 ; i++) {
- ap_num = admin_site_survey(sites);
- if (ap_num > 0) break;
- sleep(1);
- }
- if (enet.wl_g.enable == 0 || g_link_status == 1) {
- //system("/sbin/ifconfig ra0 down"); obsoleted, obsoleted, admin doesn't user this command anymore
- enet_restore_essid(&(enet.wl_g)); // restore configuration file
- }
- if (ap_num > 0)
- {
- ap_num = (ap_num > 20) ? 20 : ap_num;
- SetTCPCfgPkt(&cfgret, cmd, mynodeid);
- memcpy(send_buf, &cfgret, sizeof(TCPCFG));
- memcpy(send_buf + sizeof(TCPCFG), sites, sizeof(SITESURVEY)*ap_num);
- sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(SITESURVEY)*ap_num, 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in)); //server maxinum only read 1024 bytes!
- //usleep(10000);
- //sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(SITESURVEY)*ap_num, 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in)); //server maxinum only read 1024 bytes!
- //usleep(10000);
- //sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(SITESURVEY)*ap_num, 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in)); //server maxinum only read 1024 bytes!
- }
- else
- {
- SetTCPCfgPkt(&cfgret, cmd, mynodeid);
- memcpy(send_buf, &cfgret, sizeof(TCPCFG));
- sendto(sock, send_buf, sizeof(TCPCFG), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in));
- //usleep(10000);
- //sendto(sock, send_buf, sizeof(TCPCFG), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in));
- //usleep(10000);
- //sendto(sock, send_buf, sizeof(TCPCFG), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in));
- }
- break;
- #endif
- case LED_ON_OFF_COMMAND :
- agentd_svr->sin_addr.s_addr = INADDR_BROADCAST;
- case LED_ON_OFF_COMMAND_MANUAL :
- break;
- case READ_EMAIL_AUTH :
- agentd_svr->sin_addr.s_addr = INADDR_BROADCAST;
- case READ_EMAIL_AUTH_MANUAL :
- //if (agentd_svr->sin_addr.s_addr == INADDR_BROADCAST)
- // enet_debug("recv cmd: %d READ_EMAIL_AUTH", cmd);
- //else
- // enet_debug("recv cmd: %d READ_EMAIL_AUTH_MANUAL", cmd);
- memset(&email_auth, 0, sizeof(email_auth));
- email_auth.emailauth = enet.email.email_auth;
- memcpy(email_auth.emailaccount, enet.email.username, 32);
- memcpy(email_auth.emailpassword, enet.email.passwd, 32);
- memcpy(email_auth.emailsender, enet.email.retn, 32);
- SetTCPCfgPkt(&cfgret, cmd, mynodeid);
- memcpy(send_buf, &cfgret, sizeof(TCPCFG));
- memcpy(send_buf + sizeof(TCPCFG), &email_auth, sizeof(email_auth));
- sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(email_auth), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in)); //server maxinum only read 1024 bytes!
- usleep(10000);
- sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(email_auth), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in)); //server maxinum only read 1024 bytes!
- usleep(10000);
- sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(email_auth), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in)); //server maxinum only read 1024 bytes!
- break;
- case SET_EMAIL_AUTH :
- //enet_debug("recv cmd: %d SET_EMAIL_AUTH", cmd);
- memset(&email_auth, 0, sizeof(email_auth));
- memcpy(&email_auth, buf + sizeof(TCPCFG), sizeof(email_auth));
- enet.email.email_auth = email_auth.emailauth;
- memcpy(enet.email.username, email_auth.emailaccount, 32);
- memcpy(enet.email.passwd, email_auth.emailpassword, 32);
- memcpy(enet.email.retn, email_auth.emailsender, 32);
- //enet_debug("%d %s %s %s", enet.email.email_auth, enet.email.username, enet.email.passwd, email_auth.emailsender);
- //enet_save_apply(&enet);
- enet_save_to_rt(&enet);
- enet_apply();
- need_save = 1;
- break;
- case SEND_TEST_EMAIL :
- //enet_debug("recv cmd: %d SEND_TEST_EMAIL", cmd);
- memset(&testmail, 0, sizeof(testmail));
- memcpy(&testmail, buf, sizeof(testmail));
- enet.email.email_auth = testmail.email_auth;
- memcpy(enet.email.username, testmail.email_account, 32);
- memcpy(enet.email.passwd, testmail.email_password, 32);
- memcpy(enet.email.retn, testmail.email_sender, 32);
- memcpy(enet.email.rcpt, testmail.email_receive, 32);
- memcpy(enet.email.server, testmail.email_server, 32);
- //enet_save_apply(&enet);
- enet_save_to_rt(&enet);
- enet_apply();
- enet_test_email();
- need_save = 1;
- break;
- case READ_FTP_SETTING :
- agentd_svr->sin_addr.s_addr = INADDR_BROADCAST;
- case READ_FTP_SETTING_MANUAL :
- //if (agentd_svr->sin_addr.s_addr == INADDR_BROADCAST)
- // enet_debug("recv cmd: %d READ_FTP_SETTING", cmd);
- //else
- // enet_debug("recv cmd: %d READ_FTP_SETTING_MANUAL", cmd);
- memset(&ftp, 0, sizeof(ftp));
- SetTCPCfgPkt(&ftp.header, cmd, mynodeid);
- memcpy(ftp.Server, enet.avs.ftp.server, 64);
- ftp.Port = enet.avs.ftp.port;
- ftp.Port = htonl(ftp.Port);
- memcpy(ftp.UserName, enet.avs.ftp.user, 32);
- memcpy(ftp.Password, enet.avs.ftp.passwd, 32);
- memcpy(ftp.Folder, enet.avs.ftp.path, 128);
- ftp.Passive = enet.avs.ftp.passive;
- memcpy(send_buf, &ftp, sizeof(FTP_SETTING));
- sendto(sock, send_buf, sizeof(FTP_SETTING), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in));
- usleep(10000);
- sendto(sock, send_buf, sizeof(FTP_SETTING), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in));
- usleep(10000);
- sendto(sock, send_buf, sizeof(FTP_SETTING), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in));
- break;
- case SET_FTP_SETTING :
- //enet_debug("recv cmd: %d SET_FTP_SETTING", cmd);
- memset(&ftp, 0, sizeof(FTP_SETTING));
- memcpy(&ftp, buf, sizeof(FTP_SETTING));
- memcpy(enet.avs.ftp.server,ftp.Server, 64);
- enet.avs.ftp.port = ntohl(ftp.Port);
- memcpy(enet.avs.ftp.user, ftp.UserName, 32);
- memcpy(enet.avs.ftp.passwd, ftp.Password, 32);
- memcpy(enet.avs.ftp.path, ftp.Folder, 128);
- enet.avs.ftp.passive = ftp.Passive;
- //enet_save_apply(&enet);
- enet_save_to_rt(&enet);
- enet_apply();
- need_save = 1;
- break;
- case READ_PPPOE_SETTING :
- agentd_svr->sin_addr.s_addr = INADDR_BROADCAST;
- case READ_PPPOE_SETTING_MANUAL :
- //if (agentd_svr->sin_addr.s_addr == INADDR_BROADCAST)
- // enet_debug("recv cmd: %d READ_PPPOE_SETTING", cmd);
- //else
- // enet_debug("recv cmd: %d READ_PPPOE_SETTING_MANUAL", cmd);
- memset(&pppoe, 0, sizeof(pppoe));
- SetTCPCfgPkt(&pppoe.header, cmd, mynodeid);
- pppoe.MTU = htonl(enet.pppoe.mtu);
- memcpy(pppoe.UserName, enet.pppoe.username, 64);
- memcpy(pppoe.Password, enet.pppoe.passwd, 64);
- memcpy(send_buf, &pppoe, sizeof(PPPOE_SETTING));
- sendto(sock, send_buf, sizeof(PPPOE_SETTING), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in));
- usleep(10000);
- sendto(sock, send_buf, sizeof(PPPOE_SETTING), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in));
- usleep(10000);
- sendto(sock, send_buf, sizeof(PPPOE_SETTING), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in));
- break;
- case SET_PPPOE_SETTING :
- //enet_debug("recv cmd: %d SET_PPPOE_SETTING", cmd);
- memset(&pppoe, 0, sizeof(PPPOE_SETTING));
- memcpy(&pppoe, buf, sizeof(PPPOE_SETTING));
- enet.pppoe.mtu = ntohl(pppoe.MTU);
- memcpy(enet.pppoe.username, pppoe.UserName, 64);
- memcpy(enet.pppoe.passwd, pppoe.Password, 64);
- //enet_save_apply(&enet);
- enet_save_to_rt(&enet);
- enet_apply();
- need_save = 1;
- break;
- case GET_USERS :
- agentd_svr->sin_addr.s_addr = INADDR_BROADCAST;
- case GET_USERS_MANUAL :
- //if (agentd_svr->sin_addr.s_addr == INADDR_BROADCAST)
- // enet_debug("recv cmd: %d GET_USERS", cmd);
- //else
- // enet_debug("recv cmd: %d GET_USERS_MANUAL", cmd);
- memset(&users, 0, sizeof(users));
- SetTCPCfgPkt(&users.header, cmd, mynodeid);
- for (i = 0 ; i < 4 ; i++)
- {
- strncpy(users.users[i], enet.users[i].login, IPCAM_LOGIN_LEN);
- strncpy(users.passwd[i], enet.users[i].passwd, IPCAM_PASSWD_LEN);
- if (enet.users[i].enabled)
- users.check |= 1 << i;
- //enet_debug("%s %s %X", users.users[i], users.passwd[i], users.check);
- }
- memcpy(send_buf, &users, sizeof(users));
- sendto(sock, send_buf, sizeof(users), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in));
- usleep(10000);
- sendto(sock, send_buf, sizeof(users), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in));
- usleep(10000);
- sendto(sock, send_buf, sizeof(users), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in));
- break;
- case SET_USERS :
- //enet_debug("recv cmd: %d SET_USERS", cmd);
- // delete all normal users first
- userid = umGetFirstUser();
- while (userid) {
- if (!strcmp(umGetUserGroup(userid), "guest")) {
- if (umDeleteUser(userid) == 0) {
- userid = umGetFirstUser();
- }
- }
- else
- userid = umGetNextUser(userid);
- }
- memset(&users, 0, sizeof(users));
- memcpy(&users, buf, sizeof(users));
- for (i = 0 ; i < 4 ; i++)
- {
- strncpy(enet.users[i].login, users.users[i], IPCAM_LOGIN_LEN);
- strncpy(enet.users[i].passwd, users.passwd[i], IPCAM_PASSWD_LEN);
- if (users.check & 1 << i)
- {
- enet.users[i].enabled = 1;
- umAddUser(users.users[i], users.passwd[i], "guest", 0, 0);
- }
- else
- enet.users[i].enabled = 0;
- //enet_debug("%s %s %X", enet.users[i].login, enet.users[i].passwd, enet.users[i].enabled);
- }
- //enet_save_apply(&enet);
- enet_save_to_rt(&enet);
- enet_apply();
- need_save = 1;
- break;
- case READ_TIME_SETTING :
- agentd_svr->sin_addr.s_addr = INADDR_BROADCAST;
- case READ_TIME_SETTING_MANUAL :
- //if (agentd_svr->sin_addr.s_addr == INADDR_BROADCAST)
- // enet_debug("recv cmd: %d READ_TIME_SETTING", cmd);
- //else
- // enet_debug("recv cmd: %d READ_TIME_SETTING_MANUAL", cmd);
- enet_load(&enet);
- memset(&datetime, 0, sizeof(datetime));
- SetTCPCfgPkt(&datetime.header, cmd, mynodeid);
- datetime.timezone = htonl(enet.ntp.tz);
- //ntp_addr.s_addr = enet.ntp.ntpserver;
- //strcpy(datetime.server, inet_ntoa(ntp_addr));
- strncpy(datetime.server, enet.ntp.ntpservername, 31); datetime.server[31] = 0;
- //enet_debug("ntp server:%s", datetime.server);
- datetime.mode = enet.ntp.mode;
- memcpy(send_buf, &datetime, sizeof(datetime));
- sendto(sock, send_buf, sizeof(datetime), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in));
- usleep(10000);
- sendto(sock, send_buf, sizeof(datetime), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in));
- usleep(10000);
- sendto(sock, send_buf, sizeof(datetime), 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in));
- break;
- case SET_TIME_SETTING :
- //enet_debug("recv cmd: %d SET_TIME_SETTING", cmd);
- enet_load(&enet);
- memset(&datetime, 0, sizeof(datetime));
- memcpy(&datetime, buf, sizeof(datetime));
- datetime.timezone = ntohl(datetime.timezone);
- if (datetime.mode == 0) //manual
- {
- enet.ntp.mode = 0;
- //enet_debug("datetime.timezone:%d", datetime.timezone);
- for (i = 0; i < num_enet_tz; i++) {
- if (enet_tz[i].tz == datetime.timezone) {
- enet.ntp.tz = enet_tz[i].tz;
- enet.ntp.mw = enet_tz[i].mw;
- }
- }
- enet_form_set_date_time(ntohl(datetime.year),
- ntohl(datetime.month),
- ntohl(datetime.day),
- ntohl(datetime.hour),
- ntohl(datetime.minutes),
- ntohl(datetime.second));
- }
- else if (datetime.mode == 1) // ntp
- {
- //enet.ntp.ntpserver = inet_addr(datetime.server);
- strcpy(enet.ntp.ntpservername, datetime.server);
- for (i = 0; i < num_enet_tz; i++) {
- if (enet_tz[i].tz == datetime.timezone) {
- enet.ntp.tz = enet_tz[i].tz;
- enet.ntp.mw = enet_tz[i].mw;
- }
- }
- enet.ntp.mode = 1;
- //enet_sync_ntp(); this blocks too long
- }
- //enet_save_apply(&enet);
- enet_save_to_rt(&enet);
- enet_apply();
- need_save = 1;
- break;
- default:
- //enet_debug("recv cmd: %d Unknown command!", cmd);
- break;
- }
- }
- else {
- /*
- * check special case (Tester �M��)
- */
- // Tester: set Domain Channel (Wireless Country Region)
- if (buf[6] == 0x06 && buf[7] == 0x00 && buf[8] == 0xF9 && buf[9] == 0xFF && buf[10] == 0x00 && buf[11] == 0x02)
- {
- enet_debug("recv cmd: set Domain Channel");
- enet_load(&enet);
- bzero(&cfgret, sizeof(TCPCFG));
- memset(cfgret.NodeID, 0xFF, 6);
- cfgret.edicfg[0] = 0x06;
- cfgret.edicfg[1] = RESPONSE;
- cfgret.edicfg[2] = 0xff - 0x06;
- cfgret.edicfg[3] = 0xff - RESPONSE;
- memcpy(send_buf, &cfgret, sizeof(TCPCFG));
- memcpy(send_buf + 12, "PASS", sizeof(TCPCFG));
- //enet_debug("Channel: %d-%d", buf[12], buf[13]);
- #ifdef ENET_SUPPORT_WLAN
- if (getRegionCountryNum(buf[12], buf[13]) >= 0)
- {
- CountryRegion = getRegionCountryNum(buf[12], buf[13]);
- // enet_debug("CountryRegion:%d", CountryRegion);
- enet.wl_g.CountryRegion = CountryRegion;
- enet_save_apply(&enet);
- // save CountryRegion to flash for reset-to-default
- if (saveCountryRegionFlash(CountryRegion) != HW_SETTING_LENGTH)
- memcpy(send_buf + 12, "FAIL", sizeof(TCPCFG));
- }
- else
- #endif
- memcpy(send_buf + 12, "FAIL", sizeof(TCPCFG));
- agentd_svr->sin_addr.s_addr = INADDR_BROADCAST;
- sendto(sock, send_buf, 16, 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in));
- }
- else if (buf[6] == 0x01 && buf[7] == 0x00 && buf[8] == 0xFE && buf[9] == 0xFF) // Tester: Upgrade FW
- {
- enet_debug("Tester: Upgrade FW");
- enet_load(&enet);
- sprintf(tftp_cmd, "/usr/bin/tftp get %s:run.bin", inet_ntoa(agentd_svr->sin_addr));
- system(tftp_cmd);
- bzero(&cfgret, sizeof(TCPCFG));
- memset(cfgret.NodeID, 0xFF, 6);
- cfgret.edicfg[0] = 0x01;
- cfgret.edicfg[1] = RESPONSE;
- cfgret.edicfg[2] = 0xff - 0x01;
- cfgret.edicfg[3] = 0xff - RESPONSE;
- memcpy(send_buf, &cfgret, sizeof(TCPCFG));
- memcpy(send_buf + 12, "PASS", sizeof(TCPCFG));
- agentd_svr->sin_addr.s_addr = INADDR_BROADCAST;
- sendto(sock, send_buf, 16, 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in));
- enet_reboot();
- }
- else // Tester: set Ethernet MAC ID
- {
- long command = *((long*)buf);
- enet_load(&enet);
- command = ntohl(command);
- if (command == 22) {
- enet_debug("MAC: %X %X %X %X %X %X\n", buf[20], buf[21], buf[22], buf[23], buf[24], buf[25]);
- if (saveMACFlash(&buf[20]) == HW_SETTING_LENGTH) {
- enet_t enet;
- enet_factory(&enet);
- enet_save(&enet);
- //enet_save_apply(&enet);
- Set_MyNodeID();
- // write anything
- memset(send_buf, 0xEE, 20);
- agentd_svr->sin_addr.s_addr = INADDR_BROADCAST;
- sendto(sock, send_buf, 16, 0, (struct sockaddr *)agentd_svr, sizeof(struct sockaddr_in));
- }
- }
- }
- }
- }
- /**
- * Start the agent and its threads
- */
- static void *agentd_thread(void *args)
- {
- int sock;
- int rval, fromlen;
- unsigned char recv_buf[MAX_SIZE];
- struct sockaddr_in svr;
- struct sockaddr_in agentd_svr_addr;
- enet_agentd_t *agentd = (enet_agentd_t *) args;
- int t = 1;
- enet_t enet;
- TCPCFG cfgret;
- IC_SETTING icsetting;
- IC_NAME ic;
- unsigned char cmd;
- unsigned char send_buf[1024];
- fd_set readfds;
- struct timeval timeout;
- enet_debug("enet agentd started PID:%d", getpid());
- Set_MyNodeID(); // mynodeid == mac address
- enet_load(&enet);
- sock = socket(AF_INET, SOCK_DGRAM, 0);
- if (sock < 0){
- enet_perror("socket()");
- return NULL;
- }
- // neo@acelink: send a search reponse packet to alert admin-program
- t = 1;
- setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &t, sizeof(int));
- memset(&svr, 0x0, sizeof(svr));
- svr.sin_family = AF_INET;
- svr.sin_addr.s_addr = INADDR_BROADCAST;
- svr.sin_port = htons(ENET_AGENTD_PORT);
- bzero(send_buf, 1024);
- bzero(&icsetting, sizeof(IC_SETTING));
- cmd = SEARCH_IPCAM;
- Set_IC_NAME(&ic, &enet);
- SetTCPCfgPkt(&cfgret, cmd, mynodeid);
- memcpy(send_buf, &cfgret, sizeof(TCPCFG));
- memcpy(send_buf + sizeof(TCPCFG), &ic, sizeof(IC_NAME));
- rval = sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(IC_NAME), 0, (struct sockaddr *)&svr, sizeof(svr));
- usleep(10000);
- rval = sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(IC_NAME), 0, (struct sockaddr *)&svr, sizeof(svr));
- usleep(10000);
- rval = sendto(sock, send_buf, sizeof(TCPCFG) + sizeof(IC_NAME), 0, (struct sockaddr *)&svr, sizeof(svr));
- close(sock);
- // neo@acelink --end
- memset(&svr, 0x0, sizeof(svr));
- svr.sin_family = AF_INET;
- svr.sin_addr.s_addr = INADDR_ANY;
- svr.sin_port = htons(ENET_AGENTD_PORT);
- sock = socket(AF_INET, SOCK_DGRAM, 0);
- if (sock < 0){
- enet_perror("socket()");
- return NULL;
- }
- t = 1;
- setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &t, sizeof(int));
- setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &t, sizeof(int));
- rval = bind(sock, (struct sockaddr *)&svr, sizeof(svr));
- if (rval < 0){
- enet_perror("bind()");
- close(sock);
- return NULL;
- }
- while (agentd->running){
- FD_ZERO(&readfds);
- FD_SET(sock, &readfds);
- timeout.tv_sec = 0;
- timeout.tv_usec = 50000;
- if ((rval = select(sock+1, &readfds, NULL, NULL, &timeout)) > 0) {
- if (FD_ISSET(sock, &readfds)) {
- fromlen = sizeof(agentd_svr_addr);
- rval = recvfrom(sock, recv_buf, sizeof(recv_buf), 0, (struct sockaddr *)&agentd_svr_addr, &fromlen);
- if (rval < 0)
- enet_perror("recvfrom()");
- if(rval > 0){
- dispatch(recv_buf, rval, sock, &agentd_svr_addr);
- }
- }
- }
- else if (rval < 0) {
- //enet_perror("agentd:");
- agentd->running = 0;
- }
- }
- close(sock);
- enet_debug("enet_agentd end...");
- return NULL;
- }
- void write_proc_led(int led, int status)
- {
- /*
- led: POWER_LED :("0")
- NETWORK_LED :("1")
- status:
- LED_OFF (0)
- LED_ON (1)
- LED_BLINK (2)
- LED_RANDOM_BLINK (3)
- */
- FILE *f = fopen("/proc/led", "w");
- if (f) {
- //fprintf(f, "%d", val);
- fprintf(f, "%d %d", led, status);
- fclose(f);
- }
- }
- // keep LAN/WLAN LED on or off
- static void *led_thread(void *args)
- {
- enet_agentd_t *agentd = (enet_agentd_t *) args;
- return NULL;
- }
- void enet_agentd_init(void *obj)
- {
- enet_runtime_t *rt = (enet_runtime_t *) obj;
- enet_agentd_t *agentd = &rt->agentd;
- memset(agentd, 0x0, sizeof(*agentd));
- }
- void enet_agentd_start(void *obj)
- {
- enet_runtime_t *rt = (enet_runtime_t *) obj;
- enet_agentd_t *agentd = &rt->agentd;
- if (agentd->running)
- return;
- agentd->running = 1;
- pthread_create(&agentd->thread, NULL, agentd_thread, agentd);
- pthread_create(&ledctl_handle, NULL, led_thread, agentd);
- }
- void enet_agentd_cleanup(void *obj)
- {
- enet_agentd_stop(obj);
- }
- void enet_agentd_restart(void *obj)
- {
- enet_agentd_stop(obj);
- enet_agentd_start(obj);
- }
- void enet_agentd_stop(void *obj)
- {
- enet_runtime_t *rt = (enet_runtime_t *) obj;
- enet_agentd_t *agentd = &rt->agentd;
- if (!agentd->running)
- return;
- agentd->running = 0;
- pthread_join(agentd->thread, NULL);
- pthread_join(ledctl_handle, NULL);
- }
- bool enet_agentd_isrunning(void *obj)
- {
- enet_runtime_t *rt = (enet_runtime_t *) obj;
- enet_agentd_t *agentd = &rt->agentd;
- return agentd->running;
- }
- //////////////////////////////////////////////////////////////////////////////
- int saveCountryRegionFlash(int CountryRegion)
- {
- int fh;
- int rval = -1;
- unsigned char val = CountryRegion;
- char buf[HW_SETTING_LENGTH];
- if ((fh = open (FLASH_DEVICE_NAME_HWINFO, O_RDWR)) < 0){
- fprintf(stderr, "Can't read from flash memory!");
- return -1;
- }
- else {
- read(fh, buf, HW_SETTING_LENGTH);
- buf[6] = val;
- lseek(fh, 0, SEEK_SET);
- rval = write(fh, buf, HW_SETTING_LENGTH);
- close(fh);
- }
- if (rval != HW_SETTING_LENGTH)
- {
- enet_debug("saveCountryRegionFlash(): write flash error!");
- perror("");
- }
- return rval;
- }
- int saveMACFlash(unsigned char *mac)
- {
- int fh;
- unsigned char mac_addr[6];
- int i, rval = -1;
- char buf[HW_SETTING_LENGTH];
- for (i = 0 ; i < 6 ; i++) {
- mac_addr[i] = *(mac+i);
- fprintf(stderr, "%02X\n", mac_addr[i]);
- }
- if ((fh = open (FLASH_DEVICE_NAME_HWINFO, O_RDWR)) < 0){
- fprintf(stderr, "Can't read from flash memory!");
- }
- else {
- read(fh, buf, HW_SETTING_LENGTH);
- memcpy(buf, mac_addr, 6);
- lseek(fh, 0, SEEK_SET);
- rval = write(fh, buf, HW_SETTING_LENGTH);
- close(fh);
- }
- if (rval != HW_SETTING_LENGTH)
- {
- enet_debug("saveMACFlash(): write flash error!");
- perror("");
- }
- return rval;
- }
- void getRegionCountryRange(int cr, int *a, int *b)
- {
- #ifdef RT2500
- switch (cr)
- {
- case 0 : *a = 1 ; *b = 11; break;
- case 1 : *a = 1 ; *b = 11; break;
- case 2 : *a = 1 ; *b = 13; break;
- case 3 : *a = 10 ; *b = 11; break;
- case 4 : *a = 10 ; *b = 13; break;
- case 5 : *a = 14 ; *b = 14; break;
- case 6 : *a = 1 ; *b = 14; break;
- case 7 : *a = 3 ; *b = 9; break;
- }
- #elif defined (RT2561) || defined (RT2860)
- switch (cr)
- {
- case 0 : *a = 1 ; *b = 11; break;
- case 1 : *a = 1 ; *b = 13; break;
- case 2 : *a = 10 ; *b = 11; break;
- case 3 : *a = 10 ; *b = 13; break;
- case 4 : *a = 14 ; *b = 14; break;
- case 5 : *a = 1 ; *b = 14; break;
- case 6 : *a = 3 ; *b = 9; break;
- }
- #endif
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement