source: uKadecot/trunk/kadecot/wamp.h

Last change on this file was 108, checked in by coas-nagasima, 9 years ago

MIMEプロパティの変更

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr; charset=SHIFT_JIS
File size: 5.4 KB
RevLine 
[101]1/*
2 * TOPPERS ECHONET Lite Communication Middleware
3 *
4 * Copyright (C) 2015 Cores Co., Ltd. Japan
5 *
6 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
7 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
8 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
9 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
10 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
11 * スコード中に含まれていること.
12 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
13 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
14 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
15 * の無保証規定を掲載すること.
16 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
17 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
18 * と.
19 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
20 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
21 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
22 * 報告すること.
23 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
24 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
25 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
26 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
27 * 免責すること.
28 *
29 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
30 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
31 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
32 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
33 * の責任を負わない.
34 *
35 * @(#) $Id: wamp.h 108 2015-06-11 09:15:46Z coas-nagasima $
36 */
37
38#ifndef WAMP_H
39#define WAMP_H
40
41#include "jsonsl.h"
42#include "echonet_fbs.h"
43#include "wamp_router.h"
44#include "wamp_client.h"
45#include "wamp_broker.h"
46#include "wamp_publisher.h"
47#include "wamp_subscriber.h"
48#include "wamp_dealer.h"
49#include "wamp_caller.h"
50#include "wamp_callee.h"
51
52#define JSN_NLEVELS 10
53
54/* パースエラー */
55extern const char parse_error[];
56/* 無効なリクエスト */
57extern const char invalid_request[];
58/* 存在しないメソッド */
59extern const char method_not_found[];
60/* echo objectが存在しない, JSONArray形式になっていない */
61extern const char invalid_params[];
62/* タイムアウト発生, コールバックが null*/
63extern const char internal_error[];
64
65typedef enum wamp_code{
66 WAMP_CODE_NONE = 0,
67 WAMP_CODE_HELLO = 1,
68 WAMP_CODE_WELCOME = 2,
69 WAMP_CODE_ABORT = 3,
70 WAMP_CODE_CHALLENGE = 4,
71 WAMP_CODE_AUTHENTICATE = 5,
72 WAMP_CODE_GOODBYE = 6,
73 WAMP_CODE_ERROR = 8,
74 WAMP_CODE_PUBLISH = 16,
75 WAMP_CODE_PUBLISHED = 17,
76 WAMP_CODE_SUBSCRIBE = 32,
77 WAMP_CODE_SUBSCRIBED = 33,
78 WAMP_CODE_UNSUBSCRIBE = 34,
79 WAMP_CODE_UNSUBSCRIBED = 35,
80 WAMP_CODE_EVENT = 36,
81 WAMP_CODE_CALL = 48,
82 WAMP_CODE_CANCEL = 49,
83 WAMP_CODE_RESULT = 50,
84 WAMP_CODE_REGISTER = 64,
85 WAMP_CODE_REGISTERED = 65,
86 WAMP_CODE_UNREGISTER = 66,
87 WAMP_CODE_UNREGISTERED = 67,
88 WAMP_CODE_INVOCATION = 68,
89 WAMP_CODE_INTERRUPT = 69,
90 WAMP_CODE_YIELD = 70,
91} wamp_code_t;
92
93typedef enum wamp_parse_state{
94 WAMP_PARSE_STATE_IDLE,
95 WAMP_PARSE_STATE_CODE_PUSH,
96 WAMP_PARSE_STATE_CODE_POP,
97 WAMP_PARSE_STATE_ID_PUSH,
98 WAMP_PARSE_STATE_LIST_PUSH,
99 WAMP_PARSE_STATE_DICT_PUSH,
100 WAMP_PARSE_STATE_URI_PUSH,
101 WAMP_PARSE_STATE_INT_PUSH,
102 WAMP_PARSE_STATE_STRING_PUSH,
103 WAMP_PARSE_STATE_PARAM,
104 WAMP_PARSE_STATE_NOMORE_PARAM,
105 WAMP_PARSE_STATE_ERROR
106} wamp_parse_state_t;
107
108typedef enum wamp_param_state
109{
110 WAMP_PARAM_STATE_NONE,
111 WAMP_PARAM_STATE_SESSION_ID,
112 WAMP_PARAM_STATE_REQUEST_ID,
113 WAMP_PARAM_STATE_REGISTRATION_ID,
114 WAMP_PARAM_STATE_SUBSCRIPTION_ID,
115 WAMP_PARAM_STATE_PUBLICATION_ID,
116 WAMP_PARAM_STATE_ARGUMENTS_LIST,
117 WAMP_PARAM_STATE_OPTIONS_DICT,
118 WAMP_PARAM_STATE_DETAILS_DICT,
119 WAMP_PARAM_STATE_ARGUMENTSKW_DICT,
120 WAMP_PARAM_STATE_EXTRA_DICT,
121 WAMP_PARAM_STATE_REALM_URI,
122 WAMP_PARAM_STATE_PROCEDURE_URI,
123 WAMP_PARAM_STATE_REASON_URI,
124 WAMP_PARAM_STATE_TOPIC_URI,
125 WAMP_PARAM_STATE_ERROR_URI,
126 WAMP_PARAM_STATE_TYPE_INT,
127 WAMP_PARAM_STATE_AUTHMETHOD_STRING,
128 WAMP_PARAM_STATE_SIGNATURE_STRING,
129} wamp_param_state_t;
130
131typedef void (* wamp_proc_handler_t)(struct wamp_state *s, jsonsl_action_t action,
132 struct jsonsl_state_st *state, const char *buf);
133
134typedef void (*wamp_param_handler_t)(struct wamp_state *s, jsonsl_action_t action,
135 wamp_param_state_t param, const char *value);
136
137typedef void (*wamp_message_close_handler_t)(struct wamp_state *s);
138
139typedef struct wamp_state
140{
141 char jsn[sizeof(struct jsonsl_st) + ((JSN_NLEVELS - 1) * sizeof(struct jsonsl_state_st))];
142 wamp_parse_state_t state;
143 wamp_param_state_t prmst;
144 wamp_code_t code;
145 wamp_proc_handler_t proc_handler;
146 wamp_param_handler_t param_handler;
147 wamp_message_close_handler_t message_close_handler;
148 ID wbsid;
149 char jsn_buf[80];
150 int jsn_buf_pos;
151 wamp_router_t router;
152 wamp_client_t client;
153 wamp_broker_t broker;
154 wamp_dealer_t dealer;
155 wamp_publisher_t publisher;
156 wamp_subscriber_t subscriber;
157 wamp_caller_t caller;
158 wamp_callee_t callee;
159} wamp_state_t;
160
161void wamp_init(wamp_state_t *s);
162void wamp_put_msg(wamp_state_t *s, ECN_FBS_ID msg, ID wbsid);
163void wamp_state_callback(jsonsl_t jsn, jsonsl_action_t action,
164 struct jsonsl_state_st *state, const char *buf);
165int wamp_error_callback(jsonsl_t jsn, jsonsl_error_t err,
166 struct jsonsl_state_st *state, char *errat);
167ER wamp_send_error_res(struct wamp_state *s, wamp_code_t code,
168 int requestId, const char *error);
169
170#endif /* WAMP_H */
Note: See TracBrowser for help on using the repository browser.