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,7 +267,8 @@
267 typedef enum lib3270_ssl_state 267 typedef enum lib3270_ssl_state
268 { 268 {
269 LIB3270_SSL_UNSECURE, /**< No secure connection */ 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 LIB3270_SSL_NEGOTIATING, /**< Negotiating SSL */ 272 LIB3270_SSL_NEGOTIATING, /**< Negotiating SSL */
272 LIB3270_SSL_UNDEFINED /**< Undefined */ 273 LIB3270_SSL_UNDEFINED /**< Undefined */
273 } LIB3270_SSL_STATE; 274 } LIB3270_SSL_STATE;
src/include/pw3270/v3270.h
@@ -84,12 +84,13 @@ @@ -84,12 +84,13 @@
84 V3270_COLOR_OIA_FOREGROUND, 84 V3270_COLOR_OIA_FOREGROUND,
85 V3270_COLOR_OIA_SEPARATOR, 85 V3270_COLOR_OIA_SEPARATOR,
86 V3270_COLOR_OIA_STATUS_OK, 86 V3270_COLOR_OIA_STATUS_OK,
  87 + V3270_COLOR_OIA_STATUS_WARNING,
87 V3270_COLOR_OIA_STATUS_INVALID, 88 V3270_COLOR_OIA_STATUS_INVALID,
88 89
89 V3270_COLOR_COUNT 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 typedef enum _v3270_oia_field 95 typedef enum _v3270_oia_field
95 { 96 {
src/lib3270/telnet.c
@@ -861,6 +861,9 @@ static void ssl_negotiate(H3270 *hSession) @@ -861,6 +861,9 @@ static void ssl_negotiate(H3270 *hSession)
861 SSL_get_verify_result(hSession->ssl_con)); 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 /* Tell the world that we are (still) connected, now in secure mode. */ 867 /* Tell the world that we are (still) connected, now in secure mode. */
865 lib3270_set_connected(hSession); 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,7 +3280,7 @@ static void ssl_info_callback(INFO_CONST SSL *s, int where, int ret)
3277 { 3280 {
3278 trace_dsn(hSession,"%s: SSL_CB_HANDSHAKE_DONE state=%04x\n",__FUNCTION__,SSL_state(s)); 3281 trace_dsn(hSession,"%s: SSL_CB_HANDSHAKE_DONE state=%04x\n",__FUNCTION__,SSL_state(s));
3279 if(SSL_state(s) == 0x03) 3282 if(SSL_state(s) == 0x03)
3280 - set_ssl_state(hSession,LIB3270_SSL_SECURE); 3283 + set_ssl_state(hSession,LIB3270_SSL_NEGOTIATED);
3281 else 3284 else
3282 set_ssl_state(hSession,LIB3270_SSL_UNSECURE); 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,14 +126,31 @@ static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkColor *clr)
126 clr[V3270_COLOR_OIA_SEPARATOR] = clr[V3270_COLOR_GREEN]; 126 clr[V3270_COLOR_OIA_SEPARATOR] = clr[V3270_COLOR_GREEN];
127 clr[V3270_COLOR_OIA_STATUS_OK] = clr[V3270_COLOR_GREEN]; 127 clr[V3270_COLOR_OIA_STATUS_OK] = clr[V3270_COLOR_GREEN];
128 clr[V3270_COLOR_OIA_STATUS_INVALID] = clr[V3270_COLOR_RED]; 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 val = g_key_file_get_string(conf,group,"OIA",NULL); 131 val = g_key_file_get_string(conf,group,"OIA",NULL);
131 if(val) 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 g_strfreev(str); 155 g_strfreev(str);
139 } 156 }
@@ -405,6 +422,7 @@ static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkColor *clr) @@ -405,6 +422,7 @@ static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkColor *clr)
405 N_( "OIA foreground" ), // TERMINAL_COLOR_OIA_FOREGROUND 422 N_( "OIA foreground" ), // TERMINAL_COLOR_OIA_FOREGROUND
406 N_( "OIA separator" ), // TERMINAL_COLOR_OIA_SEPARATOR 423 N_( "OIA separator" ), // TERMINAL_COLOR_OIA_SEPARATOR
407 N_( "OIA status ok" ), // TERMINAL_COLOR_OIA_STATUS_OK 424 N_( "OIA status ok" ), // TERMINAL_COLOR_OIA_STATUS_OK
  425 + N_( "OIA Warning" ), // V3270_COLOR_OIA_STATUS_WARNING
408 N_( "OIA status invalid" ), // TERMINAL_COLOR_OIA_STATUS_INVALID 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 @@ @@ -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,6 +52,7 @@ static void draw_cursor_position(cairo_t *cr, GdkRectangle *rect, struct v3270_m
52 52
53 #include "locked.xbm" 53 #include "locked.xbm"
54 #include "unlocked.xbm" 54 #include "unlocked.xbm"
  55 + #include "negotiated.xbm"
55 56
56 /*--[ Implement ]------------------------------------------------------------------------------------*/ 57 /*--[ Implement ]------------------------------------------------------------------------------------*/
57 58
@@ -334,8 +335,16 @@ void v3270_draw_ssl_status(cairo_t *cr, H3270 *host, struct v3270_metrics *metri @@ -334,8 +335,16 @@ void v3270_draw_ssl_status(cairo_t *cr, H3270 *host, struct v3270_metrics *metri
334 bits = (unsigned char *) unlocked_bits; 335 bits = (unsigned char *) unlocked_bits;
335 break; 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 width = locked_width; 348 width = locked_width;
340 height = locked_height; 349 height = locked_height;
341 bits = (unsigned char *) locked_bits; 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,9 +352,9 @@ void v3270_draw_ssl_status(cairo_t *cr, H3270 *host, struct v3270_metrics *metri
343 352
344 case LIB3270_SSL_NEGOTIATING: /**< Negotiating SSL */ 353 case LIB3270_SSL_NEGOTIATING: /**< Negotiating SSL */
345 gdk_cairo_set_source_color(cr,color+V3270_COLOR_OIA_STATUS_WARNING); 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 break; 358 break;
350 359
351 default: 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,6 +1167,7 @@ void v3270_set_colors(GtkWidget *widget, const gchar *colors)
1167 "#00FF00," // V3270_COLOR_OIA 1167 "#00FF00," // V3270_COLOR_OIA
1168 "#7890F0," // V3270_COLOR_OIA_SEPARATOR 1168 "#7890F0," // V3270_COLOR_OIA_SEPARATOR
1169 "#FFFFFF," // V3270_COLOR_OIA_STATUS_OK 1169 "#FFFFFF," // V3270_COLOR_OIA_STATUS_OK
  1170 + "#FFFF00," // V3270_COLOR_OIA_STATUS_WARNING
1170 "#FF0000"; // V3270_COLOR_OIA_STATUS_INVALID 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,8 +1229,15 @@ void v3270_set_color_table(GdkColor *table, const gchar *colors)
1228 1229
1229 clr = g_strsplit(colors,",",V3270_COLOR_COUNT+1); 1230 clr = g_strsplit(colors,",",V3270_COLOR_COUNT+1);
1230 cnt = g_strv_length(clr); 1231 cnt = g_strv_length(clr);
  1232 +
1231 switch(cnt) 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 case V3270_COLOR_COUNT: // Complete string 1241 case V3270_COLOR_COUNT: // Complete string
1234 for(f=0;f < V3270_COLOR_COUNT;f++) 1242 for(f=0;f < V3270_COLOR_COUNT;f++)
1235 gdk_color_parse(clr[f],table+f); 1243 gdk_color_parse(clr[f],table+f);