#include "stdafx.h" #include "util_param.h" #include "util_cgi.hpp" #include #include "./util_source/util_url.hpp" int get_keyword(IN const char* str, IN const char* keyword, OUT char* buf, IN int buf_size) { buf[0] = 0; char* pt = strstr((char*)str, keyword); if(pt == NULL) return -1; pt += strlen(keyword); if(pt[0] != '=') return -2; pt++; // ¹®ÀÚ¿­ÀÇ ³¡ ȤÀº \n±îÁö°¡ °ªÀÌ´Ù. int pos = str_pos_from_chars(pt, "\n"); if(pos == -1) pos = strlen(pt); if(pos > buf_size) return -3; strncpy(buf, pt, pos); buf[pos] = 0; // remove new line char remove_last_chars(buf, "\r\n"); return strlen(buf); } void test_get_keyword() { char str[1024]; strcpy(str, "Network.eth0.mac=1234:000\nHaHa\nVersion.firmware=00.79.00"); int hr; char buf[1024]; int buf_size; buf_size = sizeof(buf); hr = get_keyword(str, "Network.eth0.mac", buf, buf_size); ASSERT(hr > 0); ASSERT(strcmp(buf, "1234:000") == 0); hr = get_keyword(str, "Network", buf, buf_size); ASSERT(hr <= 0); hr = get_keyword(str, "Version.firmware", buf, buf_size); ASSERT(hr > 0); ASSERT(strcmp(buf, "00.79.00") == 0); hr = get_keyword(str, "HaHa", buf, buf_size); ASSERT(hr < 0); } // keyword = "Network.eth0.MACAddress" // +=0: ÀÀ´ä µ¥ÀÌÅÍ ±æÀÌ°ª // -1: could not find keyword on result string // -2: invalid response don't end with \n\n int get_param(IN const char* url, IN const char* id, IN const char* pw, IN const char* keyword, OUT char* out_buf, IN int out_buf_size) { //char param_get[1024]; //strcpy(param_get, keyword); char query[1024]; sprintf(query, "/enc-cgi/admin/param.cgi?action=list&%s", keyword); char url2[1024]; char ip[100]; int port; BOOL bSSL; url_get_real_url(url, url2, &port, &bSSL); if(port == 0) // http°¡ ¸í½ÃµÇÁö ¾ÊÀº °æ¿ì port = 80; get_ip_address(url2, ip); char query_result[1024]; int hr; hr = http_get_authen(ip, port, id, pw, query, query_result, sizeof(query_result)); if(hr <= 0) { return hr-20; } char* pt = strstr(query_result, keyword); if(pt == NULL) return -1; #if 0 // Network.eth0.MACAddress=00:13:23:03:15:2A\n\n pt += strlen(keyword)+1; //if(strlen(pt)+1 > max_out_buf) //{ // return -2; //} int ll = strlen(pt); if(pt[ll-1] != '\n') { return -2; } // ¹®ÀÚ¿­ ¸¶Áö¸·¿¡ \n\nÀ» Á¦°ÅÇؾßÇÑ´Ù. pt[ll-1] = 0; strcpy(out_buf, pt); // *out_buf_size = ll; return strlen(out_buf); #else strcpy(out_buf, pt); remove_last_chars(out_buf, "\n\r"); return strlen(out_buf); #endif } // param.cgi¿¡¼­ ¾òÀº Äõ¸®¿¡¼­ keyword¿¡ ÇØ´çÇÏ´Â °ªÀ» ¾ò¾î¿Â´Ù. ´ÜÀÏ Äõ¸®¸¸ »ç¿ë°¡´É int get_param_one(IN const char* url, IN const char* id, IN const char* pw, IN const char* keyword, OUT char* out_buf, IN int out_buf_size) { char buf[1024]; int hr = get_param(url, id, pw, keyword, buf, sizeof(buf)); if(hr <= 0) return hr-10; hr = get_keyword(buf, keyword, out_buf, out_buf_size); if(hr <= 0) return -1; return 1; }