Commit 42f8ef8001e11c640695102b12bcc879a58d69b5

Authored by perry.werneck@gmail.com
1 parent 79c270d5

Melhorando indicação de status da conexão SSL

src/include/lib3270.h
... ... @@ -267,7 +267,8 @@
267 267 typedef enum lib3270_ssl_state
268 268 {
269 269 LIB3270_SSL_UNSECURE, /**< No secure connection */
270   - LIB3270_SSL_SECURE, /**< Connection secure */
  270 + LIB3270_SSL_SECURE, /**< Connection secure with CA check */
  271 + LIB3270_SSL_NEGOTIATED, /**< Connection secure, no CA or self-signed */
271 272 LIB3270_SSL_NEGOTIATING, /**< Negotiating SSL */
272 273 LIB3270_SSL_UNDEFINED /**< Undefined */
273 274 } LIB3270_SSL_STATE;
... ...
src/include/pw3270/v3270.h
... ... @@ -84,12 +84,13 @@
84 84 V3270_COLOR_OIA_FOREGROUND,
85 85 V3270_COLOR_OIA_SEPARATOR,
86 86 V3270_COLOR_OIA_STATUS_OK,
  87 + V3270_COLOR_OIA_STATUS_WARNING,
87 88 V3270_COLOR_OIA_STATUS_INVALID,
88 89  
89 90 V3270_COLOR_COUNT
90 91 };
91 92  
92   - #define V3270_COLOR_OIA_STATUS_WARNING V3270_COLOR_OIA_STATUS_OK
  93 +// #define V3270_COLOR_OIA_STATUS_WARNING V3270_COLOR_OIA_STATUS_OK
93 94  
94 95 typedef enum _v3270_oia_field
95 96 {
... ...
src/lib3270/telnet.c
... ... @@ -861,6 +861,9 @@ static void ssl_negotiate(H3270 *hSession)
861 861 SSL_get_verify_result(hSession->ssl_con));
862 862 }
863 863  
  864 + if(!SSL_get_verify_result(hSession->ssl_con))
  865 + set_ssl_state(hSession,LIB3270_SSL_SECURE);
  866 +
864 867 /* Tell the world that we are (still) connected, now in secure mode. */
865 868 lib3270_set_connected(hSession);
866 869 }
... ... @@ -3277,7 +3280,7 @@ static void ssl_info_callback(INFO_CONST SSL *s, int where, int ret)
3277 3280 {
3278 3281 trace_dsn(hSession,"%s: SSL_CB_HANDSHAKE_DONE state=%04x\n",__FUNCTION__,SSL_state(s));
3279 3282 if(SSL_state(s) == 0x03)
3280   - set_ssl_state(hSession,LIB3270_SSL_SECURE);
  3283 + set_ssl_state(hSession,LIB3270_SSL_NEGOTIATED);
3281 3284 else
3282 3285 set_ssl_state(hSession,LIB3270_SSL_UNSECURE);
3283 3286 }
... ...
src/pw3270/colors.c
... ... @@ -126,14 +126,31 @@ static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkColor *clr)
126 126 clr[V3270_COLOR_OIA_SEPARATOR] = clr[V3270_COLOR_GREEN];
127 127 clr[V3270_COLOR_OIA_STATUS_OK] = clr[V3270_COLOR_GREEN];
128 128 clr[V3270_COLOR_OIA_STATUS_INVALID] = clr[V3270_COLOR_RED];
  129 + clr[V3270_COLOR_OIA_STATUS_WARNING] = clr[V3270_COLOR_YELLOW];
129 130  
130 131 val = g_key_file_get_string(conf,group,"OIA",NULL);
131 132 if(val)
132 133 {
133   - gchar **str = g_strsplit(val,",",5);
  134 + gchar **str = g_strsplit(val,",",6);
134 135  
135   - for(f=0;f< MIN(g_strv_length(str),4); f++)
136   - gdk_color_parse(str[f],clr+V3270_COLOR_OIA_BACKGROUND+f);
  136 + // 0 = V3270_COLOR_OIA_BACKGROUND,
  137 + // 1 = V3270_COLOR_OIA_FOREGROUND,
  138 + // 2 = V3270_COLOR_OIA_SEPARATOR,
  139 + // 3 = V3270_COLOR_OIA_STATUS_OK,
  140 + // 4 = V3270_COLOR_OIA_STATUS_WARNING,
  141 + // 5 = V3270_COLOR_OIA_STATUS_INVALID,
  142 +
  143 + if(g_strv_length(str) == 5)
  144 + {
  145 + for(f=0;f < 5; f++)
  146 + gdk_color_parse(str[f],clr+V3270_COLOR_OIA_BACKGROUND+f);
  147 + clr[V3270_COLOR_OIA_STATUS_INVALID] = clr[V3270_COLOR_OIA_STATUS_WARNING];
  148 + }
  149 + else
  150 + {
  151 + for(f=0;f< MIN(g_strv_length(str),6); f++)
  152 + gdk_color_parse(str[f],clr+V3270_COLOR_OIA_BACKGROUND+f);
  153 + }
137 154  
138 155 g_strfreev(str);
139 156 }
... ... @@ -405,6 +422,7 @@ static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkColor *clr)
405 422 N_( "OIA foreground" ), // TERMINAL_COLOR_OIA_FOREGROUND
406 423 N_( "OIA separator" ), // TERMINAL_COLOR_OIA_SEPARATOR
407 424 N_( "OIA status ok" ), // TERMINAL_COLOR_OIA_STATUS_OK
  425 + N_( "OIA Warning" ), // V3270_COLOR_OIA_STATUS_WARNING
408 426 N_( "OIA status invalid" ), // TERMINAL_COLOR_OIA_STATUS_INVALID
409 427  
410 428 };
... ...
src/pw3270/v3270/negotiated.xbm 0 → 100644
... ... @@ -0,0 +1,14 @@
  1 +#define negotiated_width 32
  2 +#define negotiated_height 32
  3 +static unsigned char negotiated_bits[] = {
  4 + 0x00, 0xfc, 0x3f, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x07, 0xe0, 0x00,
  5 + 0x80, 0x03, 0xc0, 0x01, 0xc0, 0xf1, 0x8f, 0x03, 0xc0, 0xf8, 0x1f, 0x03,
  6 + 0xc0, 0x1c, 0x38, 0x03, 0xc0, 0x0c, 0x30, 0x03, 0xc0, 0x0c, 0x30, 0x03,
  7 + 0xc0, 0x0c, 0x30, 0x03, 0xc0, 0x0c, 0x30, 0x03, 0xc0, 0x0c, 0x30, 0x03,
  8 + 0xc0, 0x0c, 0x30, 0x03, 0xc0, 0x0c, 0x30, 0x03, 0xf0, 0xff, 0xff, 0x0f,
  9 + 0xf0, 0xff, 0xff, 0x0f, 0x30, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x0c,
  10 + 0x30, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x0c,
  11 + 0x30, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x0c,
  12 + 0x30, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x0c,
  13 + 0x30, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x0c,
  14 + 0xf0, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0x0f };
... ...
src/pw3270/v3270/oia.c
... ... @@ -52,6 +52,7 @@ static void draw_cursor_position(cairo_t *cr, GdkRectangle *rect, struct v3270_m
52 52  
53 53 #include "locked.xbm"
54 54 #include "unlocked.xbm"
  55 + #include "negotiated.xbm"
55 56  
56 57 /*--[ Implement ]------------------------------------------------------------------------------------*/
57 58  
... ... @@ -334,8 +335,16 @@ void v3270_draw_ssl_status(cairo_t *cr, H3270 *host, struct v3270_metrics *metri
334 335 bits = (unsigned char *) unlocked_bits;
335 336 break;
336 337  
337   - case LIB3270_SSL_SECURE: /**< Connection secure */
338   - gdk_cairo_set_source_color(cr,color+V3270_COLOR_OIA_FOREGROUND);
  338 + case LIB3270_SSL_NEGOTIATED: /**< Connection secure, no CA or self-signed */
  339 + gdk_cairo_set_source_color(cr,color+V3270_COLOR_OIA_STATUS_WARNING);
  340 + width = negotiated_width;
  341 + height = negotiated_height;
  342 + bits = (unsigned char *) negotiated_bits;
  343 + break;
  344 +
  345 +
  346 + case LIB3270_SSL_SECURE: /**< Connection secure with CA check */
  347 + gdk_cairo_set_source_color(cr,color+V3270_COLOR_OIA_STATUS_OK);
339 348 width = locked_width;
340 349 height = locked_height;
341 350 bits = (unsigned char *) locked_bits;
... ... @@ -343,9 +352,9 @@ void v3270_draw_ssl_status(cairo_t *cr, H3270 *host, struct v3270_metrics *metri
343 352  
344 353 case LIB3270_SSL_NEGOTIATING: /**< Negotiating SSL */
345 354 gdk_cairo_set_source_color(cr,color+V3270_COLOR_OIA_STATUS_WARNING);
346   - width = locked_width;
347   - height = locked_height;
348   - bits = (unsigned char *) locked_bits;
  355 + width = unlocked_width;
  356 + height = unlocked_height;
  357 + bits = (unsigned char *) unlocked_bits;
349 358 break;
350 359  
351 360 default:
... ...
src/pw3270/v3270/unlocked.xbm
1   -#define unlocked_width 32
2   -#define unlocked_height 32
3   -static unsigned char unlocked_bits[] = {
4   - 0x00, 0x00, 0xff, 0x0f, 0x00, 0x80, 0xff, 0x1f, 0x00, 0xc0, 0x01, 0x38,
5   - 0x00, 0xe0, 0x00, 0x70, 0x00, 0x70, 0xfc, 0xe3, 0x00, 0x30, 0xfe, 0xc7,
6   - 0x00, 0x30, 0x07, 0xce, 0x00, 0x30, 0x03, 0xcc, 0x00, 0x30, 0x03, 0xcc,
7   - 0x00, 0x30, 0x03, 0xcc, 0x00, 0x30, 0x03, 0xcc, 0x00, 0x30, 0x03, 0xcc,
8   - 0x00, 0x30, 0x03, 0xfc, 0x00, 0x30, 0x03, 0xfc, 0xff, 0xff, 0x3f, 0x00,
9   - 0xff, 0xff, 0x3f, 0x00, 0x33, 0x33, 0x33, 0x00, 0x33, 0x33, 0x33, 0x00,
10   - 0xcf, 0xcc, 0x3c, 0x00, 0xcf, 0xcc, 0x3c, 0x00, 0x33, 0x33, 0x33, 0x00,
11   - 0x33, 0x33, 0x33, 0x00, 0xcf, 0xcc, 0x3c, 0x00, 0xcf, 0xcc, 0x3c, 0x00,
12   - 0x33, 0x33, 0x33, 0x00, 0x33, 0x33, 0x33, 0x00, 0xcf, 0xcc, 0x3c, 0x00,
13   - 0xcf, 0xcc, 0x3c, 0x00, 0x33, 0x33, 0x33, 0x00, 0x33, 0x33, 0x33, 0x00,
14   - 0xff, 0xff, 0x3f, 0x00, 0xff, 0xff, 0x3f, 0x00 };
  1 +#define unlocked_width 32
  2 +#define unlocked_height 32
  3 +static unsigned char unlocked_bits[] = {
  4 + 0x00, 0x00, 0xff, 0x0f, 0x00, 0x80, 0xff, 0x1f, 0x00, 0xc0, 0x01, 0x38,
  5 + 0x00, 0xe0, 0x00, 0x70, 0x00, 0x70, 0xfc, 0xe3, 0x00, 0x30, 0xfe, 0xc7,
  6 + 0x00, 0x30, 0x07, 0xce, 0x00, 0x30, 0x03, 0xcc, 0x00, 0x30, 0x03, 0xcc,
  7 + 0x00, 0x30, 0x03, 0xcc, 0x00, 0x30, 0x03, 0xcc, 0x00, 0x30, 0x03, 0xcc,
  8 + 0x00, 0x30, 0x03, 0xfc, 0x00, 0x30, 0x03, 0xfc, 0xff, 0xff, 0x3f, 0x00,
  9 + 0xff, 0xff, 0x3f, 0x00, 0x03, 0x00, 0x30, 0x00, 0x03, 0x00, 0x30, 0x00,
  10 + 0x03, 0x00, 0x30, 0x00, 0x03, 0x00, 0x30, 0x00, 0x03, 0x00, 0x30, 0x00,
  11 + 0x03, 0x00, 0x30, 0x00, 0x03, 0x00, 0x30, 0x00, 0x03, 0x00, 0x30, 0x00,
  12 + 0x03, 0x00, 0x30, 0x00, 0x03, 0x00, 0x30, 0x00, 0x03, 0x00, 0x30, 0x00,
  13 + 0x03, 0x00, 0x30, 0x00, 0x03, 0x00, 0x30, 0x00, 0x03, 0x00, 0x30, 0x00,
  14 + 0xff, 0xff, 0x3f, 0x00, 0xff, 0xff, 0x3f, 0x00 };
... ...
src/pw3270/v3270/widget.c
... ... @@ -1167,6 +1167,7 @@ void v3270_set_colors(GtkWidget *widget, const gchar *colors)
1167 1167 "#00FF00," // V3270_COLOR_OIA
1168 1168 "#7890F0," // V3270_COLOR_OIA_SEPARATOR
1169 1169 "#FFFFFF," // V3270_COLOR_OIA_STATUS_OK
  1170 + "#FFFF00," // V3270_COLOR_OIA_STATUS_WARNING
1170 1171 "#FF0000"; // V3270_COLOR_OIA_STATUS_INVALID
1171 1172  
1172 1173 }
... ... @@ -1228,8 +1229,15 @@ void v3270_set_color_table(GdkColor *table, const gchar *colors)
1228 1229  
1229 1230 clr = g_strsplit(colors,",",V3270_COLOR_COUNT+1);
1230 1231 cnt = g_strv_length(clr);
  1232 +
1231 1233 switch(cnt)
1232 1234 {
  1235 + case 28: // Version 4 string
  1236 + for(f=0;f < 28;f++)
  1237 + gdk_color_parse(clr[f],table+f);
  1238 + table[V3270_COLOR_OIA_STATUS_INVALID] = table[V3270_COLOR_OIA_STATUS_WARNING];
  1239 + break;
  1240 +
1233 1241 case V3270_COLOR_COUNT: // Complete string
1234 1242 for(f=0;f < V3270_COLOR_COUNT;f++)
1235 1243 gdk_color_parse(clr[f],table+f);
... ...