2 * @file timeMeasureTool.h
6 * @date 2012-08-07 新規作成
8 * Copyright (c) 2012 TOYOTA MOTOR CORPORATION.
9 * (Insert a Licence Condition Here.)
17 #include <stdio.h> /* C言語標準ヘッダ類 */
23 #include <sys/types.h>
28 #include <sys/socket.h>
29 #include <netinet/in.h>
30 #include <arpa/inet.h>
37 #define VEHICLEINFO_DAEMON_COEXIST 1 /* マスターとスレーブを同一CPUに置く場合には1にする */
38 /* この場合、共有メモリやライブラリとの通信ポートを別にする */
40 #define VEHICLEINFO_DAEMON_INET 1 /* Linux内 Daemon〜Library間通信のドメイン */
41 /* 0=UNIXドメイン(AF_UNIX)を使用する */
42 /* 1=INETドメイン(AF_INET)を使用する */
43 /* UNIXドメインの方が性能的には有利だが、 */
44 /* SMACK色々不自由な点も多いので、INETを使う。 */
47 #define WEBSOCKET6 0 /* WebSocketnのプロトコルバージョン6対応 */
48 /* (厳密な試験はしていないので、使う場合は */
52 #define DEFAULT_HOST "127.0.0.1" /* 既定のマスタのホスト名(localhost) */
53 #define DEFAULT_PORT 39200 /* 既定のポート番号ベース */
54 #define DEFAULT_PORT_WB 39201 /* 既定のポート番号ベース(WebSocket用) */
55 #define DEFAULT_PORT_NT 39202 /* 既定のポート番号ベース(Native用) */
56 #define DEFAULT_PORT_NT2 39203 /* 既定のポート番号ベース(Native用) */
57 #define VEHICLEINFO_MAX_LOG_LINES 5000 /* ログのファイル当たりの最大行数 */
58 #define MEASURE_MAX_LOG_FILES 10 /* ログの最大個数 */
60 #define CONNECT_TIMER 10 /* ソケットConnect待ち時間(秒) */
61 #define CONNECT_WAIT (200) /* マスタとの接続リトライ時間(ミリ秒単位) */
62 #define CLIENT_BIND_WAIT (180*1000) /* Bind失敗時の最大待ち時間(ミリ秒単位) */
63 #define TRANSLOG_NUM (240) /* 転送ログ蓄積個数 */
65 #define DAEMON_MASTER (0) /* 自身がマスターデーモン */
66 #define DAEMON_SLAVE (1) /* 自身がスレーブデーモン */
67 #define DAEMON_NAME "timeMeasureRecv" /*自身のデーモン名 */
70 #define VEHICLEINFO_MAX_PRIV 8 /* 読み込み/書き込み権限の最大値 */
71 #define VEHICLEINFO_MAX_CLIENT 50 /* 最大クライアント(Library)数 */
72 #define VEHICLEINFO_WEBSOCKET_MAXPROT 128 /* WebSocketのプロトコル処理の最大電文長(CR,LFを含む) */
73 #define TEST_WEBSOCKET_MAXPROT 1024*1024 /* WebSocketのプロトコル処理の最大電文長(CR,LFを含む) */
74 #define MEASURE_SOCKET_MAXDATA 2048 /* Socketの最大電文長(CR,LFを含む) */
77 #define MEASURE_LOG_DIR "/var/log/vehicleinfo/log"
81 #define CONNSTAT_UNKNOWN 0 /* 不明 */
82 #define CONNSTAT_DATA 1 /* WebSocket,データ転送中 */
83 #define CONNSTAT_DATA_NT 3 /* NativeのSocket,データ転送中 */
84 #define CONNSTAT_HS0 10 /* WebSocket,ハンドシェイク中(GET未受信) */
85 #define CONNSTAT_HS1 11 /* WebSocket,ハンドシェイク中(キー未受信) */
86 #define CONNSTAT_HS2 12 /* WebSocket,ハンドシェイク中(キー受信済) */
87 #if WEBSOCKET6 /* WebSocket旧プロトコル(バージョン6)対応 */
88 #define CONNSTAT_HS11 21 /* WebSocket旧プロトコル、Key1受信Key2未受信 */
89 #define CONNSTAT_HS12 22 /* WebSocket旧プロトコル、Key2受信Key1未受信 */
90 #define CONNSTAT_HS13 23 /* WebSocket旧プロトコル、Key1,2受信済、空行待ち */
91 #define CONNSTAT_HS14 24 /* WebSocket旧プロトコル、Key1,2受信済、ボディ待ち */
92 #define CONNSTAT_DATA6 2 /* WebSocket,データ転送中(旧プロトコル) */
93 #endif /*WEBSOCKET6*/ /* WebSocket旧プロトコル(バージョン6)対応 */
96 typedef struct T_MEASURE_SAVEDATA_t
98 unsigned short Size; /* 保持しているバイト数 */
99 unsigned short BufSize; /* バッファの大きさ(バイト数) */
100 char *Buf; /* 保持データ(動的アロケーション) */
101 } S_MEASURE_SAVEDATA_t;
104 typedef struct T_MEASURE_MNG_t
106 int Socket; /* ソケット(ファイルディスクリプタ) */
107 short ConnStat; /* 接続状態 */
108 char Res[2]; /* (空き) */
109 S_MEASURE_SAVEDATA_t SaveData; /* 受信データ保持バッファ */
110 #if WEBSOCKET6 /* WebSocket旧プロトコル(バージョン6)対応 */
111 int Key1; /* WebSocketのKey1 */
112 int Key2; /* WebSocketのKey2 */
113 #endif /*WEBSOCKET6*/ /* WebSocket旧プロトコル(バージョン6)対応 */
117 #define TRANSLOG_INFO_START 0x0201 /* 情報ログ(処理開始) */
118 #define TRANSLOG_INFO_END 0x0202 /* 情報ログ(処理終了) */
119 #define TRANSLOG_INFO_DOWN 0x0203 /* 情報ログ(異常終了) */
120 #define CLILOG_SEND_WSDT 0x1021 /* クライアントへの送信ログ(WebSocketデータ) */
121 #define CLILOG_RECEIVE_WSDT 0x1022 /* クライアントからの受信ログ(WebSocketデータ) */
122 #define CLILOG_RECEIVE_NTDT 0x1023 /* クライアントからの受信ログ(Nativeデータ) */
123 #if WEBSOCKET6 /* WebSocket旧プロトコル(バージョン6)対応 */
124 #define CLILOG_SEND_WSDT6 0x1021 /* クライアントへの送信ログ(WebSocketデータ) */
125 #define CLILOG_RECEIVE_WSDT6 0x1022 /* クライアントからの受信ログ(WebSocketデータ) */
126 #define CLILOG_RECEIVE_NTDT6 0x1023 /* クライアントからの受信ログ(Nativeデータ) */
127 #endif /*WEBSOCKET6*/ /* WebSocket旧プロトコル(バージョン6)対応 */
128 #define CLILOG_SEND_WSHS 0x1031 /* クライアントへの送信ログ(WebSocketハンドシェイク) */
129 #define CLILOG_RECEIVE_WSHS 0x1032 /* クライアントからの受信ログ(WebSocketハンドシェイク) */
130 #define CLILOG_CONNECT 0x1101 /* クライアントとの接続ログ */
131 #define CLILOG_DISCONNECT 0x1102 /* クライアントとの切断ログ */
133 #define MEASURELOG_MAX_STR 1024 /* ログの文字列の最大サイズ */
134 #define MEASURE_CLILOG_MAX_STR (sizeof(struct timeval) + MEASURELOG_MAX_STR)
136 typedef struct T_MEASURELOG_t
138 short LogType; /* ログの種別 */
139 short Id; /* 車両情報ID(クライアントならクライアントID) */
140 short Size; /* データサイズ */
141 short Info; /* 付加情報 */
142 struct timeval Time; /* 送受信時刻(自マシンの日付時刻) */
143 struct timeval DataTime; /* データ更新日付時刻(自マシンの日付時刻) */
151 char Cvalue[MEASURELOG_MAX_STR + 1];
157 typedef struct T_NTRECV_t
159 int Socket; // ソケット番号
160 int nRcvBufSize; // 受信バッファサイズ
161 FILE *LogFd; // ログファイルポインタ
162 int client_idx; // クライアント番号
163 pthread_mutex_t printLock; // ログ出力時ミューテクス
166 /* 内部関数のプロトタイプ宣言(RECV) */
167 void DisconnectClient(int ClientID);
169 int ClientHandShake(int ClientID); /* クライアントからのハンドシェイク受信 */
170 int ClientRequest(int ClientID); /* クライアントからの要求受信 */
171 void *NativeRecieve(void *); /* Nativeソケット受信関数 */
174 /* 内部関数のプロトタイプ宣言(SEND) */
175 void TEST_SOCKET_CLOSE();
176 char *TEST_GET_TIME();
177 double TEST_GET_TIME2();
178 char *TEST_GET_LOGMSG(char *msg);
179 char *TEST_GET_LOGMSG2(char *msg);
180 char *TEST_GET_TOP(); //未使用
181 char *TEST_GET_PID(char *pProcName);
182 char *ltrim(char *s);
183 char *rtrim(char *s);
185 char *strim(char *base, char *rmvstr);
186 int TEST_SOCKET_CREATE_THREAD(int port, char pname[]);
187 void *TEST_SOCKET_RUN(void *arg);
188 int TEST_SOCKET_PREPARE_SEND(char msg[]);
195 * End of File. (timeMeasureTool.h)