-
Notifications
You must be signed in to change notification settings - Fork 2
API kr_search_ex (KO)
kr_search_ex - libkrisp database의 사용자 table을 제어 합니다.
#include <krisp.h>
typedef struct raw_netinfos {
char err[1024]; // get error meassages
char ip[16]; // given address
char ** dummy; // array of 3th field with pipe seperator of table
char * dummydata; // 3th field strings with pipe seperator of table
ulong start; // start of range
ulong end; // end of range
bool verbose; // verbose option. need initialize
short size; // size of dummy member
} KRNET_API_EX;
int kr_search_ex (KRNET_API_EX *u_isp, KR_API *db);
kr_search(3) API 가 ‘krisp’ table만 다루는 것에 반하여 kr_searhc_ex API는 이 외의 이름의 table을 다루기 위하여 제공 합니다. 즉, krisp의 database에 별도의 table을 만들어 관리를 할 수 있다는 의미 입니다.
user define table을 생성할 경우에는 db scheme은 다음과 같습니다.
CREATE TABLE ‘user_table_name‘
(
start integer NOT NULL DEFAULT ‘0‘,
end integer NOT NULL DEFAULT ‘0‘,
data varchar,
PRIMARY KEY (start DESC),
UNIQUE (end)
);
libkrisp의 모든 테이블은 모두 동일하게 위의 scheme을 가집니다.
kr_search_ex API 를 사용하기 위해서는 호출 전에 KR_API struct의 table member와 KRNET_API_EX struct의 ip member를 초기화 해 주어야 합니다.
kr_search_ex API는 내부적으로 KRNET_API_EX의 dummy, dummydata member에 메모리를 할당 합니다. 그러므로 사용 후에 반드시 메모리를 해제해 주어야 합니다. 이를 위해서 initStruct_ex API를 제공 합니다. loop에서 kr_searhc_ex를 사용 할 경우, loop 마다 initStruct_ex를 호출해 주어야 합니다.
strcpy (u_isp.ip, ipaddress);
db->table = user_define_table;
kr_search_ex (&u_isp, db);
initStruct_ex (&u_isp, true);
성공 시에 0을 반환하며, 실패 시에 1을 반환 합니다. 검색 결과가 없는 것은 성공으로 간주를 합니다.
#include <krisp.h>
int main (void) {
KR_API * db;
KRNET_API_EX u_isp;
char * addr[] = {"kns.kornet.net", "ns.dacom.co.kr"};
char * database = NULL;
char err[1024];
if ( kr_open (&db, database, err) == false ) {
fprintf (stderr, "ERROR Connect: %s\n", err);
return 1;
}
u_isp.verbose = false;
db->table = "geocipy";
for ( r=0; r<2; r++ ) {
// defined safecpy_256 in krispapi.h
safecpy_256 (isp.ip, addr);
if ( kr_search_ex (&u_isp, db) ) {
printf ("ERROR: %s\n", u_isp.err);
initStruct_ex (&u_isp, true);
kr_close (&db);
return 1;
}
/*
* long2ip is include libipcalc.
* https://github.com/Joungkyun/libipcalc/wiki/API-long2ip
* long2ip is returned in a statically allocated buffer, which
* subsequent calls will overwrite. For thread safe, use long2ip_r.
*/
printf ("%-15s %-15s %-20s", ip, isp.ip, u_isp.dummy[0]);
printf ("%-15s ", long2ip (u_isp.start));
printf ("%-15s %s", long2ip (u_isp.end), u_isp.dummy[1]);
initStruct_ex (&u_isp, true);
}
kr_close (&db);
return 0;
}
김정균 >https://joungkyun.github.com>
https://github.com/Joungkyun/libkrisp/issues
Copyright (c) 2016 JoungKyun.Kim <http://oops.org>
이 API는 LGPL 2.1을 따르며, 사용 시의 어떠한 문제에 대하여 보증하지 않습니다.