work in progress
[src/app-framework-binder.git] / plugins / samples / HelloWorld.c
1 /*
2  * Copyright (C) 2015 "IoT.bzh"
3  * Author "Fulup Ar Foll"
4  *
5  * This program is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation, either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18
19 #include <stdio.h>
20 #include <string.h>
21
22 #include "local-def.h"
23 #include "afb-req-itf.h"
24
25 static json_object* pingSample (AFB_request *request) {
26     static int pingcount = 0;
27     json_object *response;
28     char query [512];
29     size_t len;
30
31     // request all query key/value
32     len = getQueryAll (request, query, sizeof(query));
33     if (len == 0) strcpy (query,"NoSearchQueryList");
34     
35     // return response to caller
36 //    response = jsonNewMessage(AFB_SUCCESS, "Ping Binder Daemon %d query={%s}", pingcount++, query);
37     afb_req_success_f(*request->areq, NULL, "Ping Binder Daemon %d query={%s}", pingcount++, query);
38     
39     if (verbose) fprintf(stderr, "%d: \n", pingcount);
40     return NULL; //(response);
41 }
42
43 static json_object* pingFail (AFB_request *request) {
44     return NULL;
45 }
46
47 static json_object* pingBug (AFB_request *request) {
48     int a,b,c;
49     
50     fprintf (stderr, "Use --timeout=10 to trap error\n");
51     b=4;
52     c=0;
53     a=b/c;
54     
55     // should never return
56     return NULL;
57 }
58
59
60 // For samples https://linuxprograms.wordpress.com/2010/05/20/json-c-libjson-tutorial/
61 static json_object* pingJson (AFB_request *request) {
62     json_object *jresp, *embed;    
63     
64     jresp = json_object_new_object();
65     json_object_object_add(jresp, "myString", json_object_new_string ("Some String"));
66     json_object_object_add(jresp, "myInt", json_object_new_int (1234));
67      
68     embed  = json_object_new_object();
69     json_object_object_add(embed, "subObjString", json_object_new_string ("Some String"));
70     json_object_object_add(embed, "subObjInt", json_object_new_int (5678));
71     
72     json_object_object_add(jresp,"eobj", embed);
73     
74     return jresp;
75 }
76
77 // NOTE: this sample does not use session to keep test a basic as possible
78 //       in real application most APIs should be protected with AFB_SESSION_CHECK
79 static  AFB_restapi pluginApis[]= {
80   {"ping"     , AFB_SESSION_NONE, (AFB_apiCB)pingSample  , "Ping Application Framework"},
81   {"pingnull" , AFB_SESSION_NONE, (AFB_apiCB)pingFail    , "Return NULL"},
82   {"pingbug"  , AFB_SESSION_NONE, (AFB_apiCB)pingBug     , "Do a Memory Violation"},
83   {"pingJson" , AFB_SESSION_NONE, (AFB_apiCB)pingJson    , "Return a JSON object"},
84   {NULL}
85 };
86
87 static const AFB_plugin plugin = {
88         .type = AFB_PLUGIN_JSON,
89         .info = "Minimal Hello World Sample",
90         .prefix = "hello",
91         .apis = pluginApis
92 };
93
94 const AFB_plugin *pluginRegister () {
95     return &plugin;
96 };