coap-http-proxy: Declare strict void function
[iotivity.git] / service / coap-http-proxy / samples / proxy_main.c
1 //******************************************************************
2 //
3 // Copyright 2016 Samsung Electronics All Rights Reserved.
4 //
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6 //
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
10 //
11 //      http://www.apache.org/licenses/LICENSE-2.0
12 //
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
18 //
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20 #include "CoapHttpHandler.h"
21
22 #include <signal.h>
23 #include "iotivity_config.h"
24 #ifdef HAVE_UNISTD_H
25 #include <unistd.h>
26 #endif
27 #include <stdlib.h>
28 #include <string.h>
29
30 static int g_quitFlag = 0;
31 static int g_secureFlag = 0;
32
33 static char CRED_FILE[] = "oic_svr_db_server.dat";
34
35 void handleSigInt(int signum);
36
37 static void PrintUsage(void)
38 {
39     printf("Usage : proxy_main -s <0|1>\n");
40     printf("-s 0 : Launch proxy in unsecure mode.\n");
41     printf("-s 1 : Launch proxy in secure mode.\n");
42 }
43
44 FILE* server_fopen(const char *path, const char *mode)
45 {
46     if (0 == strcmp(path, OC_SECURITY_DB_DAT_FILE_NAME))
47     {
48         return fopen(CRED_FILE, mode);
49     }
50
51     return fopen(path, mode);
52 }
53
54 /*
55 * This method is an entry point of CoAP-HTTP Proxy.
56 */
57 int main(int argc, char* argv[])
58 {
59     // Initialize Persistent Storage for SVR database
60     OCPersistentStorage ps = { server_fopen, fread, fwrite, fclose, unlink };
61     OCRegisterPersistentStorageHandler(&ps);
62
63     int opt = 0;
64     while ((opt = getopt(argc, argv, "s:")) != -1)
65     {
66         switch (opt)
67         {
68             case 's':
69                 g_secureFlag = atoi(optarg);
70                 break;
71             default:
72                 PrintUsage();
73                 return -1;
74         }
75     }
76
77     if (g_secureFlag != 0 && g_secureFlag != 1)
78     {
79         PrintUsage();
80         return -1;
81     }
82
83     printf("CoAP-HTTP proxy is starting. Mode [%d].\n", g_secureFlag);
84     OCStackResult result = OCInit(NULL, 0, OC_SERVER);
85     if (result != OC_STACK_OK)
86     {
87         printf("Failed starting proxy\n");
88         return 0;
89     }
90
91     if (CHPInitialize(g_secureFlag) != OC_STACK_OK)
92     {
93         printf("Failed to start proxy.\n");
94         OCStop();
95         return 0;
96     }
97
98     printf("Proxy started successfully.\n");
99
100     signal(SIGINT, handleSigInt);
101     while (!g_quitFlag)
102     {
103         if (OCProcess() != OC_STACK_OK)
104         {
105             CHPTerminate();
106             OCStop();
107             printf("OCStack process error\n");
108             return 0;
109         }
110     }
111
112     if (CHPTerminate() != OC_STACK_OK)
113     {
114         printf("CHPTerminate failed.\n");
115     }
116     else
117     {
118         printf("CHPTerminate success.\n");
119     }
120
121     OCStop();
122     printf("Exiting proxy main loop...\n");
123     return 0;
124
125 }
126
127 /*
128 * This is a signal handling function for SIGINT(CTRL+C).
129 * A Resource Directory handle the SIGINT signal for safe exit.
130 *
131 * @param[in] signal
132 *                 signal number of caught signal.
133 */
134 void handleSigInt(int signum)
135 {
136     if (signum == SIGINT)
137     {
138         g_quitFlag = 1;
139     }
140 }
141