guowenxue
2020-08-21 02f4d9518378031c63df7a36c49d8b2eabdaab90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/*********************************************************************************
 *      Copyright:  (C) 2014 GuoWenxue<guowenxue@email.com>
 *                  All rights reserved.
 *
 *       Filename:  cvd_conf.c
 *    Description:  This file 
 *                 
 *        Version:  1.0.0(11/19/2014)
 *         Author:  GuoWenxue <guowenxue@email.com>
 *      ChangeLog:  1, Release initial version on "11/19/2014 01:58:28 PM"
 *                 
 ********************************************************************************/
 
#include "cp_logger.h"
#include "cvd_conf.h"
#include "cp_iniparser.h"
 
 
int parser_cvd_conf(char *ini_name, cp_logger *logger, comport_sock_bind_t *cvd_bind)
{
    dictionary          *ini;
    char                *str;
    int                 val, i;
 
    if(!ini_name || !logger || !cvd_bind)
    {
        log_err("Invalid input arguments\n");
        return -1 ;
    }
 
    ini = iniparser_load(ini_name);
    if (ini==NULL)
    {
        log_err("cannot parse file: %s\n", ini_name);
        return -2 ;
    }
 
    /************************************************
     * Parser the Logger configuration
     ************************************************/
 
    log_nrml("Parser configure file %s with original logger file [%s]\n", ini_name, logger->file);
 
    str = iniparser_getstring(ini, "log:file", NULL);
    strncpy(logger->file, (strlen(str)>0 ? str : CVD_DEF_LOG_FILE), FILENAME_LEN);
    log_nrml("Set log file [%d] from configuration.\n", logger->level);
 
    /*If not set the log level from command line, then use the configure one*/
    if( !(logger->flag&CP_LOGGER_LEVEL_OPT) )
    {
        val = iniparser_getint(ini, "log:level", -1);
        logger->level = (-1==val ? LOG_LEVEL_NRML : val);
        log_nrml("Set log level[%d] from configuration.\n", logger->level);
    }
 
    /* Set the log maximum file size in the configure file */
    val = iniparser_getint(ini, "log:size", -1);
    logger->size = -1==val ? CVD_DEF_LOG_SIZE : val;
    log_nrml("Set log size [%dKiB] from configuration\n", logger->size);
 
    if ( cp_log_reopen() )
    {
        printf("Log file reopen failure, exit now...\n");
        return -3;
    }
 
    log_nrml("Configure Log file \"%s\" with level [%s], maximum size %d KiB.\n",
            logger->file, log_str[logger->level], logger->size);
 
 
    for(i=0; i<MAX_BIND_TUNNEL; i++)
    {
        char        key[64];
 
        snprintf(key, sizeof(key), "TUNNEL%d:comport", i+1);
        str = iniparser_getstring(ini, key, NULL);
        if( NULL!=str && strlen(str) > 0 )
        {
            strncpy(cvd_bind->comport_dev, str, DEVNAME_LEN);
            log_info("Configure comport: %s\n", cvd_bind->comport_dev);
        }
        else
        {
            log_err("Configure file lost serial port configuration\n");
            return -3;
        }
 
        /*-----------------------------------------------------------------------------
         *  Connect socket configuration
         *-----------------------------------------------------------------------------*/
 
        snprintf(key, sizeof(key), "TUNNEL%d:conn_host", i+1);
        str = iniparser_getstring(ini, key, NULL);
        if( NULL!=str && strlen(str) > 0 )
        {
            char      *ptr;
            ptr = strtok(str, ":");
            if(ptr)
            {
                strncpy(cvd_bind->sock.host, ptr, DOMAIN_MAX_LEN);
                if( NULL != (ptr=strtok(NULL, ":")) )
                {
                    cvd_bind->sock.port = atoi(ptr);
                }
                else
                {
                    log_err("Configure file lost connect port configuration\n");
                    return -4;
                }
            }
            else
            {
                log_err("Configure file lost connect host configuration\n");
                return -5;
            }
        }
        log_nrml("Bind tunnel serial[%s] <==> socket[%s:%d]\n", cvd_bind->comport_dev, cvd_bind->sock.host, cvd_bind->sock.port);
    }
 
    return 0;
}