Commit 56e3b8230aa287c20335b036f269db5cecb98d50

Authored by perry.werneck@gmail.com
1 parent 16e7c1d4
Exists in master and in 1 other branch develop

Ajuste no tratamento de hostname para o novo formato de conexão

Showing 1 changed file with 80 additions and 6 deletions   Show diff stats
widget.c
... ... @@ -57,6 +57,15 @@
57 57 #define CONTENTS_WIDTH(terminal) (cols * terminal->metrics.width)
58 58 #define CONTENTS_HEIGHT(terminal) (((rows+1) * terminal->metrics.spacing)+OIA_TOP_MARGIN+2)
59 59  
  60 +/**
  61 + * SECTION: v3270
  62 + * @title: Virtual 3270 widget
  63 + * @short_description: The virtual 3270 terminal widget.
  64 + *
  65 + * Common functions for interact with the 3270 virtual terminal widget.
  66 + *
  67 + */
  68 +
60 69 /*--[ Widget definition ]----------------------------------------------------------------------------*/
61 70  
62 71 G_DEFINE_TYPE(v3270, v3270, GTK_TYPE_WIDGET);
... ... @@ -721,7 +730,7 @@ static void update_connect(H3270 *session, unsigned char connected)
721 730 if(connected)
722 731 {
723 732 widget->cursor.show |= 2;
724   - g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[SIGNAL_CONNECTED], 0, session->full_current_host);
  733 + g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[SIGNAL_CONNECTED], 0, session->host.full);
725 734 }
726 735 else
727 736 {
... ... @@ -1380,18 +1389,71 @@ H3270 * v3270_get_session(GtkWidget *widget)
1380 1389 return GTK_V3270(widget)->host;
1381 1390 }
1382 1391  
1383   -int v3270_connect(GtkWidget *widget, const gchar *host)
  1392 +int v3270_connect(GtkWidget *widget, const gchar *uri)
1384 1393 {
1385 1394 v3270 * terminal;
1386 1395 int rc = -1;
1387 1396  
1388   - trace("%s widget=%p host=%p",__FUNCTION__,widget,host);
  1397 + trace("%s widget=%p host=%p",__FUNCTION__,widget,uri);
1389 1398  
1390 1399 g_return_val_if_fail(GTK_IS_V3270(widget),EINVAL);
1391 1400  
1392 1401 terminal = GTK_V3270(widget);
1393 1402  
1394   - rc = lib3270_connect(terminal->host,host,0);
  1403 +#ifdef DEBUG
  1404 + if(uri)
  1405 + {
  1406 + LIB3270_CONNECT_OPTION opt = LIB3270_CONNECT_OPTION_DEFAULTS;
  1407 + gchar * scheme = g_uri_unescape_string(uri,NULL);
  1408 + gchar * hostname = strchr(scheme,':');
  1409 + gchar * srvc;
  1410 + gchar * query;
  1411 +
  1412 + if(hostname)
  1413 + {
  1414 + *(hostname++) = 0;
  1415 +
  1416 + while(*hostname && !g_ascii_isalnum(*hostname))
  1417 + hostname++;
  1418 +
  1419 + if(*hostname)
  1420 + {
  1421 + if( ! (g_ascii_strcasecmp(scheme,"l") && g_ascii_strcasecmp(scheme,"ssl")) )
  1422 + opt |= LIB3270_CONNECT_OPTION_SSL;
  1423 +
  1424 + srvc = strchr(hostname,':');
  1425 + if(srvc)
  1426 + {
  1427 + *(srvc++) = 0;
  1428 + query = strchr(srvc,'?');
  1429 + if(query)
  1430 + *(query++) = 0;
  1431 + else
  1432 + query = "";
  1433 + }
  1434 + else
  1435 + {
  1436 + srvc = "telnet";
  1437 + }
  1438 +
  1439 + rc = lib3270_connect_host(terminal->host,hostname,srvc,opt);
  1440 +
  1441 + }
  1442 +
  1443 + }
  1444 +
  1445 +
  1446 + g_free(scheme);
  1447 +
  1448 + }
  1449 + else
  1450 + {
  1451 + rc = lib3270_connect(terminal->host,uri,0);
  1452 + }
  1453 +
  1454 +#else
  1455 + rc = lib3270_connect(terminal->host,uri,0);
  1456 +#endif // DEBUG
1395 1457  
1396 1458 trace("%s exits with rc=%d (%s)",__FUNCTION__,rc,strerror(rc));
1397 1459  
... ... @@ -1476,11 +1538,23 @@ gboolean v3270_get_toggle(GtkWidget *widget, LIB3270_TOGGLE ix)
1476 1538 return FALSE;
1477 1539 }
1478 1540  
1479   -void v3270_set_host(GtkWidget *widget, const gchar *uri)
  1541 +/**
  1542 + * v3270_set_host:
  1543 + *
  1544 + * @widget: V3270 widget.
  1545 + * @uri: a valid tn3270 URL.
  1546 + *
  1547 + * Set the default URL for the tn3270e host.
  1548 + *
  1549 + * Returns: The lib3270 processed string as an internal constant.
  1550 + *
  1551 + * Since: 5.0
  1552 + **/
  1553 +const gchar * v3270_set_host(GtkWidget *widget, const gchar *uri)
1480 1554 {
1481 1555 g_return_if_fail(GTK_IS_V3270(widget));
1482 1556 g_return_if_fail(uri != NULL);
1483   - lib3270_set_host(GTK_V3270(widget)->host,uri);
  1557 + return lib3270_set_host(GTK_V3270(widget)->host,uri);
1484 1558 }
1485 1559  
1486 1560 const gchar * v3270_get_host(GtkWidget *widget)
... ...