1
1
#include "wsclient.h"
2
+ #include "../config/kube_config_common.h"
2
3
#include <stdio.h>
3
4
#include <stdlib.h>
4
5
#include <string.h>
10
11
#define TTY_STDIN_NUMBER 0
11
12
#define TTY_STDOUT_NUMBER 1
12
13
#define WS_PROTOCOL_DELIM "://"
13
- #define WS_BASE_PATH_DELIM_CHAR ':' /* ip:port */
14
+ #define WS_BASE_PATH_DELIM_CHAR ':' /* ip:port */
14
15
#define WS_BASE_PATH_DELIM_LENGTH 1
15
16
16
17
static struct lws_context * g_lws_context ;
@@ -73,7 +74,7 @@ static int get_server_address_and_port(char **p_ws_addr, int *p_ws_port, const c
73
74
return 0 ;
74
75
}
75
76
76
- wsclient_t * wsclient_create (const char * base_path , sslConfig_t * ssl_config , list_t * apiKeys , int ws_log_mask )
77
+ wsclient_t * wsclient_create (const char * base_path , sslConfig_t * ssl_config , list_t * api_tokens , int ws_log_mask )
77
78
{
78
79
if (!base_path ) {
79
80
fprintf (stderr , "%s: The base path is invalid.\n" , __func__ );
@@ -93,11 +94,12 @@ wsclient_t *wsclient_create(const char *base_path, sslConfig_t * ssl_config, lis
93
94
}
94
95
95
96
wsc -> ssl_config = ssl_config ;
97
+ wsc -> api_tokens = api_tokens ;
96
98
wsc -> log_mask = ws_log_mask ;
97
99
98
100
return wsc ;
99
101
100
- error :
102
+ error :
101
103
if (wsc ) {
102
104
free (wsc );
103
105
wsc = NULL ;
@@ -121,6 +123,7 @@ void wsclient_free(wsclient_t * wsc)
121
123
wsc -> data_received_len = 0 ;
122
124
wsc -> data_callback_func = NULL ;
123
125
wsc -> ssl_config = NULL ;
126
+ wsc -> api_tokens = NULL ;
124
127
125
128
free (wsc );
126
129
}
@@ -143,7 +146,7 @@ static void connect_client(lws_sorted_usec_list_t * sul)
143
146
i .host = i .address ;
144
147
i .origin = i .address ;
145
148
i .ssl_connection = wsc -> ssl_config ? LCCSCF_USE_SSL : 0 ;
146
-
149
+
147
150
//i.protocol = pro;
148
151
//i.local_protocol_name = "websocket-client";
149
152
i .pwsi = & wsc -> wsi ;
@@ -175,6 +178,25 @@ static int callback_wsclient(struct lws *wsi, enum lws_callback_reasons reason,
175
178
goto do_retry ;
176
179
break ;
177
180
181
+ case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER :
182
+ if (!wsc -> api_tokens ) {
183
+ return 0 ;
184
+ }
185
+ lwsl_user ("%s: LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER\n" , __func__ );
186
+ unsigned char * * p = (unsigned char * * ) in , * end = (* p ) + len ;
187
+ listEntry_t * listEntry = NULL ;
188
+ keyValuePair_t * token = NULL ;
189
+ list_ForEach (listEntry , wsc -> api_tokens ) {
190
+ token = listEntry -> data ;
191
+ if (token && token -> key && token -> value && 0 == strcmp (token -> key , AUTH_TOKEN_KEY )) {
192
+ lwsl_user ("%s: token->key==%s, token->value=%s\n" , __func__ , token -> key , (char * ) token -> value );
193
+ if (lws_add_http_header_by_token (wsi , WSI_TOKEN_HTTP_AUTHORIZATION , (unsigned char * ) token -> value , (int ) strlen (token -> value ), p , end )) {
194
+ return -1 ;
195
+ }
196
+ }
197
+ }
198
+ break ;
199
+
178
200
case LWS_CALLBACK_CLIENT_ESTABLISHED :
179
201
lwsl_user ("%s: wsclient connection established\n" , __func__ );
180
202
lws_callback_on_writable (wsi );
@@ -196,7 +218,7 @@ static int callback_wsclient(struct lws *wsi, enum lws_callback_reasons reason,
196
218
lwsl_user ("%s: The content of data received is empty.\n" , __func__ );
197
219
return 0 ;
198
220
}
199
- char * valid_data = (char * )in + 1 ;
221
+ char * valid_data = (char * ) in + 1 ;
200
222
201
223
if (wsc -> data_received_len > 0 && wsc -> data_received ) {
202
224
free (wsc -> data_received );
@@ -308,8 +330,11 @@ int wsclient_run(wsclient_t * wsc, wsc_mode_t mode)
308
330
info .fd_limit_per_thread = 1 + 1 + 1 ;
309
331
310
332
if (wsc -> ssl_config ) {
333
+ lwsl_user ("%s: CACertFile=%s\n" , __func__ , wsc -> ssl_config -> CACertFile );
311
334
info .client_ssl_ca_filepath = wsc -> ssl_config -> CACertFile ;
335
+ lwsl_user ("%s: clientKeyFile=%s\n" , __func__ , wsc -> ssl_config -> clientKeyFile );
312
336
info .client_ssl_private_key_filepath = wsc -> ssl_config -> clientKeyFile ;
337
+ lwsl_user ("%s: clientCertFile=%s\n" , __func__ , wsc -> ssl_config -> clientCertFile );
313
338
info .client_ssl_cert_filepath = wsc -> ssl_config -> clientCertFile ;
314
339
}
315
340
0 commit comments