Skip to content

API kr_search_ex (KO)

JoungKyun Kim edited this page Jul 13, 2016 · 2 revisions

이름

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_EXdummy, 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을 따르며, 사용 시의 어떠한 문제에 대하여 보증하지 않습니다.

참조

kr_open(3), kr_close(3), kr_search(3)

Clone this wiki locally