connectionMgr/src/connectionMgr.c File Reference

connectionMgr - Main routines to create an environment for the Network-connection application and to handle key strokes More...

#include <stdio.h>
#include <unistd.h>
#include <wait.h>
#include <sys/socket.h>
#include <sys/errno.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <ctype.h>
#include <glib/gutils.h>
#include <gtk/gtk.h>
#include <libergtk/ergtk.h>
#include <liberipc/eripcconnect.h>
#include <liberipc/eripctoolbar.h>
#include <liberregxml/erregapi.h>
#include "connectionMgrLog.h"
#include "displayStatus.h"
#include <liberdm/connectionMgrConstants.h>
#include "erbusy.h"
#include "pagebar.h"
#include "toolbar.h"
#include "connectScreenData.h"
#include "connectionMgr.h"
#include "connectScreen.h"
#include "connectScreenOptions.h"
#include "editScreen.h"
#include "background.h"
#include "modemUtils.h"

Go to the source code of this file.

Defines

#define SERVER_BUFFER_SIZE   1024

Functions

static void on_toolbar_synchronised (void)
static void on_goto_page (gint new_page)
static gboolean hook_screen_refresh_typing (GSignalInvocationHint *ihint, guint n_param_values, const GValue *param_values, gpointer user_data)
static gboolean on_idle_show_keyboard (gpointer data)
static gboolean on_idle_hide_keyboard (gpointer data)
static void connectMessageReceived (gpointer data, gint source_fd, GdkInputCondition condition)
GtkWidget * cmgr_screens_create (void)
void cmgr_set_screen_mode (cmgrScreen_t mode)
cmgrScreen_t cmgr_get_screen_mode (void)
void cmgr_set_toolbar (void)
void cmgr_set_pagebar (void)
guint on_cmgr_keypress (GtkWidget *widget, GdkEventKey *event, gpointer data)
static void on_cmgr_icon_clicked (int iconID, int iconState)
static void on_cmgr_toolbar_synchronised (void)
void cmgr_add_on_toolbar_sync_action (on_tbsync_action_t action)
static void keyboard_remove_idle_handler_ids (void)
static gboolean keyboard_is_running (void)
static void do_show_keyboard ()
static void do_hide_keyboard (int iconState)
void show_keyboard (gboolean show)
gboolean cmgrInstallIpcServer ()
gboolean connectStartIpcClientSetup ()
void cmgr_scan_ctxt_init (void)
void cmgr_scan_ctxt_destory (void)
scanContext_tcmgr_get_scan_ctxt (void)
void cmgr_ping_ctxt_init (void)
void cmgr_ping_ctxt_destory (void)
pingContext_tcmgr_get_ping_ctxt (void)
void connect_disable_network ()
void connect_enable_network_abort ()
static gboolean is_hex_key (const char *key)
static void add_key_prefix (const char *pkey, char **ppkey)
ecd_err_t connect_enable_network (const regNetworkProfile_t *regNetworkProfile)
static void cmgr_get_up_page (const screenPage_t *curPage, screenPage_t *upPage)
void cmgr_get_back_page (const screenPage_t *curPage, screenPage_t *backPage)
static void cmgr_get_cur_screen_page (screenPage_t *page)
static void cmgr_goto_screen_page (const screenPage_t *page)
void cmgr_up_page (void)
static gboolean on_delayed_cmgr_back_page (gpointer data)
void cmgr_back_page (void)

Variables

static GtkWidget * g_connectScreens = NULL
static GtkWidget * g_editScreens = NULL
static cmgrScreen_t g_screen_mode = cmgrScreenUndef_e
static scanContext_tg_scan_ctxt = NULL
static pingContext_tg_ping_ctxt = NULL
static volatile int enable_pid = 0
static on_tbsync_action_t on_toolbar_sync_actions [] = { NULL, NULL }
static guint g_show_idle_handler_id = 0
static guint g_hide_idle_handler_id = 0
static erServerChannel_t theServerChannel
static erClientChannel_t g_ipc_channel_setup


Detailed Description

connectionMgr - Main routines to create an environment for the Network-connection application and to handle key strokes

connectionMgr - Main routines to create an environment for the Network-connection application and to handle key strokes

Copyright (C) 2007 iRex Technologies BV.

Definition in file connectionMgr.c.


Define Documentation

#define SERVER_BUFFER_SIZE   1024

Definition at line 89 of file connectionMgr.c.


Function Documentation

static void add_key_prefix ( const char *  pkey,
char **  ppkey 
) [static]

Definition at line 719 of file connectionMgr.c.

00720 {
00721     if (is_hex_key(pkey))
00722     {
00723        *ppkey = g_strdup(pkey);
00724     }
00725     else
00726     {
00727         *ppkey = g_strdup_printf("s:%s", pkey);
00728     }
00729 
00730     CN_LOGPRINTF("output[%s]", *ppkey);
00731 }

Here is the call graph for this function:

void cmgr_add_on_toolbar_sync_action ( on_tbsync_action_t  action  ) 

Definition at line 295 of file connectionMgr.c.

00296 {
00297     int elementSize, arraySize;
00298     int i, sz;
00299 
00300     CN_LOGPRINTF("entry");
00301     
00302     g_assert(action != NULL);
00303 
00304     elementSize = sizeof(on_toolbar_sync_actions[0]);
00305     arraySize = sizeof(on_toolbar_sync_actions);
00306     sz = arraySize / elementSize;
00307     
00308     for (i = 0; i < sz; i++)
00309     {
00310         if (on_toolbar_sync_actions[i] == NULL)
00311         {
00312             on_toolbar_sync_actions[i] = action;
00313             return;
00314         }
00315     }
00316 
00317     g_assert_not_reached();
00318 }

void cmgr_back_page ( void   ) 

Definition at line 1257 of file connectionMgr.c.

01258 {
01259     // wait for a while to show back icon active state
01260     g_timeout_add(500, on_delayed_cmgr_back_page, NULL);
01261 }

Here is the call graph for this function:

void cmgr_get_back_page ( const screenPage_t curPage,
screenPage_t backPage 
)

Definition at line 1030 of file connectionMgr.c.

01032 {
01033     CN_LOGPRINTF("entry [%p][%p]", curPage, backPage);
01034     
01035     g_return_if_fail(curPage != NULL);
01036     g_return_if_fail(backPage != NULL);
01037 
01038     if ((curPage->screen == cmgrScreenConnect_e)
01039        && (curPage->page == connectScreenOptions_e))
01040     {
01041          backPage->screen = cmgrScreenUndef_e;
01042          backPage->page = -1;
01043     }
01044     else if ((curPage->screen == cmgrScreenConnect_e) 
01045             && (curPage->page == connectScreenProfiles_e))
01046     {
01047         backPage->screen = cmgrScreenConnect_e;
01048         backPage->page = connectScreenOptions_e;
01049     }
01050     else if ((curPage->screen == cmgrScreenEdit_e) 
01051             && (curPage->page == editScreenProfiles_e))
01052     { 
01053         backPage->screen = cmgrScreenUndef_e;
01054         backPage->page = -1; 
01055     }
01056     else if ((curPage->screen == cmgrScreenEdit_e) 
01057             && (curPage->page == editScreenSearch_e))
01058     { 
01059         backPage->screen = cmgrScreenUndef_e;
01060         backPage->page = -1;
01061     }
01062     else if ((curPage->screen == cmgrScreenEdit_e)
01063             && (curPage->page == editScreenWireless_e))
01064     {
01065         if (edit_get_back_overview())
01066         {
01067             backPage->screen = cmgrScreenEdit_e;
01068             backPage->page = editScreenOverview_e;
01069         }
01070         else 
01071         {
01072             if (edit_get_wizard_mode())
01073             {
01074                 backPage->screen = cmgrScreenEdit_e;
01075                 backPage->page = editScreenSearch_e;
01076             }
01077             else
01078             {
01079                 backPage->screen = cmgrScreenUndef_e;
01080                 backPage->page = -1; 
01081             }
01082         }
01083     }
01084     else if ((curPage->screen == cmgrScreenEdit_e) 
01085             && (curPage->page == editScreenOverview_e))
01086     {
01087         backPage->screen = cmgrScreenUndef_e;
01088         backPage->page = -1; 
01089     }
01090     else if ((curPage->screen == cmgrScreenEdit_e) 
01091             && (curPage->page == editScreenDialup_e))
01092     {
01093         if (edit_get_back_overview())
01094         {
01095             backPage->screen = cmgrScreenEdit_e;
01096             backPage->page = editScreenOverview_e;
01097         }
01098         else
01099         {
01100             backPage->screen = cmgrScreenUndef_e;
01101             backPage->page = -1; 
01102         }
01103     }
01104     else if ((curPage->screen == cmgrScreenEdit_e) 
01105             && (curPage->page == editScreenProxy_e))
01106     {
01107         backPage->screen = cmgrScreenEdit_e; 
01108         backPage->page = editScreenOverview_e;
01109     }
01110     else if ((curPage->screen == cmgrScreenEdit_e) 
01111             && (curPage->page == editScreenStatic_e))
01112     {
01113         backPage->screen = cmgrScreenEdit_e;
01114         backPage->page = editScreenOverview_e;
01115     }
01116     else if ((curPage->screen == cmgrScreenEdit_e) 
01117             && (curPage->page == editScreenWirelessExt_e))
01118     {
01119         if (edit_get_back_overview())
01120         {
01121             backPage->screen = cmgrScreenEdit_e;
01122             backPage->page = editScreenOverview_e;
01123         }
01124         else
01125         {
01126             backPage->screen = cmgrScreenUndef_e; 
01127             backPage->page = -1; 
01128         }
01129     }
01130     else
01131     {
01132         backPage->screen = cmgrScreenUndef_e;
01133         backPage->page = -1;
01134     }
01135     CN_LOGPRINTF("backPage[%d,%d]", backPage->screen, backPage->page);
01136 }

Here is the call graph for this function:

static void cmgr_get_cur_screen_page ( screenPage_t page  )  [static]

Definition at line 1139 of file connectionMgr.c.

01140 {
01141     g_return_if_fail(page != NULL);
01142 
01143     page->screen = cmgr_get_screen_mode();
01144     switch (page->screen)
01145     {
01146         case cmgrScreenConnect_e:
01147             page->page = connect_get_current_page(NULL);
01148             break;
01149         case cmgrScreenEdit_e:
01150             page->page = edit_get_current_page(NULL);
01151             break;
01152         default:
01153             page->page = -1;
01154             break;
01155     }
01156 }

Here is the call graph for this function:

pingContext_t* cmgr_get_ping_ctxt ( void   ) 

Definition at line 673 of file connectionMgr.c.

00674 {
00675     CN_LOGPRINTF("return %p", g_ping_ctxt);
00676     return g_ping_ctxt;
00677 }

scanContext_t* cmgr_get_scan_ctxt ( void   ) 

Definition at line 651 of file connectionMgr.c.

00652 {
00653     CN_LOGPRINTF("return %p", g_scan_ctxt);
00654     return g_scan_ctxt;
00655 }

cmgrScreen_t cmgr_get_screen_mode ( void   ) 

Definition at line 197 of file connectionMgr.c.

00198 {
00199     CN_LOGPRINTF("entry: g_screen_mode [%d]", g_screen_mode);
00200     return g_screen_mode;
00201 }

static void cmgr_get_up_page ( const screenPage_t curPage,
screenPage_t upPage 
) [static]

Definition at line 944 of file connectionMgr.c.

00946 {
00947     CN_LOGPRINTF("entry [%p][%p]", curPage, upPage);
00948 
00949     g_return_if_fail(curPage != NULL);
00950     g_return_if_fail(upPage != NULL);
00951 
00952     if ((curPage->screen == cmgrScreenConnect_e)
00953          && (curPage->page == connectScreenOptions_e))
00954     {
00955         upPage->screen = cmgrScreenUndef_e;
00956         upPage->page = -1;
00957     }
00958     else if ((curPage->screen == cmgrScreenConnect_e)
00959             && (curPage->page == connectScreenProfiles_e))
00960     {
00961         upPage->screen = cmgrScreenUndef_e;
00962         upPage->page = -1;
00963     }
00964     else if ((curPage->screen == cmgrScreenEdit_e)
00965             && (curPage->page == editScreenProfiles_e))
00966     {
00967         if (main_get_edit_only())
00968         {    
00969             upPage->screen = cmgrScreenUndef_e;
00970             upPage->page = -1;
00971         }
00972         else
00973         {
00974             upPage->screen = cmgrScreenConnect_e;
00975             upPage->page = connectScreenOptions_e;
00976         }
00977     }
00978     else if ((curPage->screen == cmgrScreenEdit_e)
00979             && (curPage->screen == editScreenSearch_e))
00980     { 
00981         upPage->screen = cmgrScreenEdit_e;
00982         upPage->page = editScreenProfiles_e;
00983     }
00984     else if ((curPage->screen == cmgrScreenEdit_e) 
00985             && (curPage->page == editScreenWireless_e))
00986     {
00987         upPage->screen = cmgrScreenEdit_e;
00988         upPage->page = editScreenProfiles_e;
00989     }
00990     else if ((curPage->screen == cmgrScreenEdit_e) 
00991             && (curPage->page == editScreenOverview_e)) 
00992     {
00993         upPage->screen = cmgrScreenEdit_e;
00994         upPage->page = editScreenProfiles_e;
00995     }
00996     else if ((curPage->screen == cmgrScreenEdit_e) 
00997             && (curPage->page == editScreenDialup_e))
00998     {
00999         upPage->screen = cmgrScreenEdit_e;
01000         upPage->page = editScreenProfiles_e;
01001     }
01002     else if ((curPage->screen == cmgrScreenEdit_e) 
01003             && (curPage->page == editScreenProxy_e))
01004     {
01005         upPage->screen = cmgrScreenEdit_e;
01006         upPage->page = editScreenProfiles_e;
01007     }
01008     else if ((curPage->screen == cmgrScreenEdit_e) 
01009             && (curPage->page == editScreenStatic_e))
01010     {
01011         upPage->screen = cmgrScreenEdit_e;
01012         upPage->page = editScreenProfiles_e;
01013     }
01014     else if ((curPage->screen == cmgrScreenEdit_e) 
01015             && (curPage->page == editScreenWirelessExt_e))
01016     {
01017         upPage->screen = cmgrScreenEdit_e;
01018         upPage->page = editScreenProfiles_e;
01019     }
01020     else
01021     {
01022         upPage->screen = cmgrScreenUndef_e;
01023         upPage->page = -1;
01024     }
01025     CN_LOGPRINTF("upPage[%d,%d]", upPage->screen, upPage->page);
01026 }

Here is the call graph for this function:

static void cmgr_goto_screen_page ( const screenPage_t page  )  [static]

Definition at line 1159 of file connectionMgr.c.

01160 {
01161     scanContext_t* ctxt;
01162 
01163     CN_LOGPRINTF("entry [%p]", page);
01164     
01165     cmgr_set_screen_mode(page->screen); 
01166     switch (page->screen)
01167     {
01168         case cmgrScreenConnect_e:
01169             connect_goto_page(page->page);
01170 
01171             // for connectScreenOptions, scan automatically
01172             if (page->page == connectScreenOptions_e)
01173             {
01174                 connect_options_display();
01175 
01176                 connect_options_restore_scan_ctxt();
01177                 ctxt = cmgr_get_scan_ctxt();
01178                 connect_scan(ctxt, TRUE);
01179             }
01180             break;
01181         case cmgrScreenEdit_e:
01182             edit_goto_page(page->page);
01183             break;
01184         default:
01185             break;
01186     }
01187 }

Here is the call graph for this function:

void cmgr_ping_ctxt_destory ( void   ) 

Definition at line 665 of file connectionMgr.c.

00666 {
00667     CN_LOGPRINTF("entry");
00668 
00669     connect_ping_ctxt_destory(g_ping_ctxt);
00670     g_ping_ctxt = NULL;
00671 }

Here is the call graph for this function:

void cmgr_ping_ctxt_init ( void   ) 

Definition at line 657 of file connectionMgr.c.

00658 {
00659     CN_LOGPRINTF("entry");
00660 
00661     cmgr_ping_ctxt_destory();
00662     g_ping_ctxt = connect_ping_ctxt_new();
00663 }

Here is the call graph for this function:

void cmgr_scan_ctxt_destory ( void   ) 

Definition at line 643 of file connectionMgr.c.

00644 {
00645     CN_LOGPRINTF("entry");
00646 
00647     connect_scan_ctxt_destory(g_scan_ctxt);
00648     g_scan_ctxt = NULL;
00649 }

Here is the call graph for this function:

void cmgr_scan_ctxt_init ( void   ) 

Definition at line 635 of file connectionMgr.c.

00636 {
00637     CN_LOGPRINTF("entry");
00638 
00639     cmgr_scan_ctxt_destory();
00640     g_scan_ctxt = connect_scan_ctxt_new();
00641 }

Here is the call graph for this function:

GtkWidget* cmgr_screens_create ( void   ) 

Definition at line 108 of file connectionMgr.c.

00109 {
00110     GtkWidget* screens;
00111     guint      signal_id;
00112 
00113     CN_LOGPRINTF("entry");
00114 
00115     // screens
00116     screens = gtk_vbox_new(FALSE, 0);
00117 
00118     // g_connectScreens
00119     g_connectScreens = connect_screen_create();
00120     connect_screen_set_text();
00121     gtk_box_pack_start(GTK_BOX(screens), g_connectScreens, 
00122                        FALSE, FALSE, 0);
00123     gtk_widget_hide(g_connectScreens);
00124 
00125     // g_editScreens
00126     g_editScreens = edit_screen_create();
00127     edit_screen_set_text();
00128     gtk_box_pack_start(GTK_BOX(screens), g_editScreens, FALSE, FALSE, 0);
00129     gtk_widget_hide(g_editScreens);
00130 
00131     // install class-specific screen update handlers
00132     //   erGtkEntry
00133     signal_id = g_signal_lookup("screen-refresh", ERGTK_ENTRY_TYPE);
00134     g_assert(signal_id > 0);
00135     g_signal_add_emission_hook(signal_id, 
00136                                0, 
00137                                hook_screen_refresh_typing, 
00138                                (gpointer)TEXT_ENTRY_CHANGED_LEVEL, 
00139                                NULL);
00140     //   erGtkToggleButton
00141     signal_id = g_signal_lookup("toggled", ERGTK_TOGGLE_BUTTON_TYPE);
00142     g_assert(signal_id > 0);
00143     g_signal_add_emission_hook(signal_id, 
00144                                 0, 
00145                                 hook_screen_refresh_typing, 
00146                                 (gpointer)SETTING_ITEM_CHANGE, 
00147                                 NULL);
00148 
00149     gtk_widget_show(screens);
00150     return screens;
00151 }

Here is the call graph for this function:

void cmgr_set_pagebar ( void   ) 

Definition at line 224 of file connectionMgr.c.

00225 {
00226     CN_LOGPRINTF("entry: g_screen_mode [%d]", g_screen_mode);
00227     
00228     switch (g_screen_mode)
00229     {
00230         case cmgrScreenConnect_e:
00231             connect_set_pagebar();
00232             break;
00233 
00234         case cmgrScreenEdit_e:
00235             edit_set_pagebar();
00236             break;
00237 
00238         default:
00239             CN_LOGPRINTF("Illegal screen g_screen_mode [%d]", 
00240                           g_screen_mode);
00241     }
00242 }

Here is the call graph for this function:

void cmgr_set_screen_mode ( cmgrScreen_t  mode  ) 

Definition at line 153 of file connectionMgr.c.

00154 {
00155     CN_LOGPRINTF("entry: mode [%d] g_screen_mode [%d]", 
00156                   mode, g_screen_mode);
00157 
00158     if (mode != g_screen_mode)
00159     {
00160         switch (mode)
00161         {
00162             case cmgrScreenConnect_e:
00163                 g_screen_mode = cmgrScreenConnect_e;
00164                 
00165                 bg_display_title();
00166 
00167                 gtk_widget_hide(g_editScreens);
00168                 gtk_widget_show(g_connectScreens);
00169 
00170                 connect_set_pagebar();
00171                 connect_set_toolbar();
00172                 
00173                 connect_screen_display();
00174                 break;
00175 
00176             case cmgrScreenEdit_e:
00177                 g_screen_mode = cmgrScreenEdit_e;
00178 
00179                 bg_display_title();
00180 
00181                 gtk_widget_hide(g_connectScreens);
00182                 gtk_widget_show(g_editScreens);
00183 
00184                 edit_set_toolbar();
00185                 edit_set_pagebar();
00186                 
00187                 edit_screen_display();
00188                 break;
00189 
00190             default:
00191                 CN_LOGPRINTF("Illegal screen mode [%d]", mode);
00192         }
00193     }
00194 }

Here is the call graph for this function:

void cmgr_set_toolbar ( void   ) 

Definition at line 203 of file connectionMgr.c.

00204 {
00205     CN_LOGPRINTF("entry: g_screen_mode [%d]", g_screen_mode);
00206 
00207     switch (g_screen_mode)
00208     {
00209         case cmgrScreenConnect_e:
00210             connect_set_toolbar();
00211             break;
00212 
00213         case cmgrScreenEdit_e:
00214             edit_set_toolbar();
00215             break;
00216 
00217         default:
00218             CN_LOGPRINTF("Illegal screen g_screen_mode [%d]", 
00219                           g_screen_mode);
00220     }
00221 
00222 }

Here is the call graph for this function:

void cmgr_up_page ( void   ) 

Definition at line 1190 of file connectionMgr.c.

01191 {
01192     screenPage_t curPage, upPage;
01193     editMode_t mode;
01194 
01195     CN_LOGPRINTF("entry");
01196  
01197     cmgr_get_cur_screen_page(&curPage);
01198     cmgr_get_up_page(&curPage, &upPage);
01199     
01200     if ((upPage.screen == cmgrScreenUndef_e)
01201         || (upPage.page == -1))
01202     {
01203         main_quit();
01204     }
01205     else
01206     {
01207         cmgr_goto_screen_page(&upPage);
01208 
01209         // The behaviour of up page to editScreenProfiles_e 
01210         // will lead to the profile editor is not only 
01211         // for filling in encryption key for access point.
01212         // So here, need to change the edit mode 
01213         // to be editModeConnectNormal_e
01214         if (upPage.screen == cmgrScreenEdit_e
01215             && upPage.page == editScreenProfiles_e)
01216         {
01217             mode = edit_get_mode();
01218             if ((mode == editModeConnectFillIn_e) 
01219                 || (mode == editModeConnectCreate_e))
01220             {
01221                 edit_set_mode(editModeConnectNormal_e);
01222             }
01223         }
01224     }
01225 }

Here is the call graph for this function:

gboolean cmgrInstallIpcServer ( void   ) 

Definition at line 530 of file connectionMgr.c.

00531 {
00532     int     ret;
00533     int     fd = -1;
00534     int     returnValue;
00535 
00536     CN_IPCPRINTF("entry");
00537 
00538     ret = erIpcOpenServerChannel(ER_CONNECT_CHANNEL, &theServerChannel);
00539 
00540     if (ret != (-1))
00541     {
00542         fd = erIpcGetServerFd(theServerChannel);
00543 
00544         CN_IPCPRINTF("erIpcGetServerFd returned %d\n", fd);
00545 
00546         // gtk specific mechanism to monitor input file descriptor.
00547         returnValue = gdk_input_add(fd, 
00548                                     GDK_INPUT_READ, 
00549                                     connectMessageReceived, 
00550                                     (gpointer) theServerChannel);
00551 
00552         CN_IPCPRINTF("gdk_input_add returned %d", returnValue);
00553         return TRUE;
00554     }
00555     else
00556     {
00557         CN_ERRORPRINTF("Could not open server channel");
00558         return FALSE;
00559     }
00560 }

Here is the call graph for this function:

void connect_disable_network ( void   ) 

Definition at line 679 of file connectionMgr.c.

00680 {
00681     // disable all interfaces
00682     system(COMMAND_IFDOWN_ALL);
00683 }

ecd_err_t connect_enable_network ( const regNetworkProfile_t regNetworkProfile  ) 

Definition at line 733 of file connectionMgr.c.

00734 {
00735     ecd_err_t err = ECD_FAILURE;
00736     char *command[128];
00737     int arg = 0;
00738     char *freelist[128];
00739     int free_arg = 0;
00740     int rc;
00741     struct in_addr address;
00742     struct in_addr netmask;
00743     struct in_addr broadcast;
00744     char *encrkey;
00745 
00746     CN_LOGPRINTF("entry");
00747     g_return_val_if_fail((regNetworkProfile != NULL), err);
00748 
00749     if (regNetworkProfile->connection != dialup_t)
00750     {
00751         FILE* fd_iface  = NULL;
00752         FILE* fd_resolv = NULL;
00753         FILE* fd_proxy  = NULL;
00754 
00755         // Create temporary files
00756         fd_iface  = fopen(INTERFACES_FILE_TMP,   "w");
00757         fd_resolv = fopen(RESOLVE_CONF_FILE_TMP, "w");
00758         fd_proxy  = fopen(HTTP_PROXY_FILE_TMP,   "w");
00759         g_return_val_if_fail((   fd_iface  != NULL
00760                               && fd_resolv != NULL
00761                               && fd_proxy  != NULL), err);
00762 
00763         // interface name
00764         fputs("iface ", fd_iface);
00765     
00766         switch (regNetworkProfile->connection)
00767         {
00768             case wired_t:
00769                 fputs(INTERFACE_WIRED, fd_iface);
00770                 break;
00771             case wireless_t:
00772                 fputs(INTERFACE_WIRELESS, fd_iface);
00773                 break;
00774             default:
00775                 CN_ERRORPRINTF("Illegal setting->connection [%d]", 
00776                                (int)regNetworkProfile->connection);
00777                 return err;
00778         }
00779 
00780         fputs(" inet ", fd_iface);  //type TCP/IP
00781 
00782         // static or dynamic IP address
00783         switch (regNetworkProfile->addressMode)
00784         {
00785             case dhcp_t:
00786                 fputs("dhcp ", fd_iface);
00787                 break;
00788 
00789             case static_t:
00790                 // static IP address etc.
00791                 fputs(  "static ", fd_iface);
00792                 fputs("\n  address ", fd_iface); 
00793                 fputs(regNetworkProfile->ipSettings->address, fd_iface);
00794                 fputs("\n  netmask ", fd_iface); 
00795                 fputs(regNetworkProfile->ipSettings->netmask, fd_iface);
00796                 fputs("\n  gateway ", fd_iface); 
00797                 fputs(regNetworkProfile->ipSettings->gateway, fd_iface);
00798 
00799                 // static DNS server address
00800                 fputs("nameserver ", fd_resolv);
00801                 fputs(regNetworkProfile->ipSettings->dns, fd_resolv);
00802                 break;
00803 
00804             default:
00805                 CN_ERRORPRINTF("Illegal setting->addresMode [%d]", 
00806                                 (int)regNetworkProfile->addressMode);
00807                 return err;
00808         }
00809 
00810         // Put proxy setting in environment
00811         if (regNetworkProfile->proxySettings == NULL)
00812         {
00813             CN_WARNPRINTF("No proxy needs to be specified");
00814             g_unsetenv("http_proxy");
00815             g_unsetenv("https_proxy");
00816         }
00817         else
00818         {
00819             char proxyString[256];
00820 
00821             snprintf(proxyString, sizeof(proxyString), 
00822                     "http://%s:%s", 
00823                     regNetworkProfile->proxySettings->address, 
00824                     regNetworkProfile->proxySettings->port);
00825             fputs(proxyString, fd_proxy);
00826             CN_WARNPRINTF("Setting proxy to %s", proxyString);
00827 
00828             g_setenv("http_proxy", proxyString, 1);
00829             g_setenv("https_proxy", proxyString, 1);
00830         }
00831 
00832         // close temporary files
00833         fputc('\n', fd_iface);   fclose(fd_iface);
00834         fputc('\n', fd_resolv);  fclose(fd_resolv);
00835         fputc('\n', fd_proxy);   fclose(fd_proxy);
00836     }
00837 
00838     // command-line to start network interface
00839     switch (regNetworkProfile->connection)
00840     {
00841         case wired_t:
00842             err = ECD_WIRED_ERROR;
00843             arg = 0;
00844             command[arg++] = COMMAND_WIRED;
00845             command[arg++] = "start";
00846             if (regNetworkProfile->addressMode == static_t)
00847             {
00848                 //inet_aton(regNetworkProfile->ipSettings->address, &address);
00849                 //inet_aton(regNetworkProfile->ipSettings->netmask, &netmask);
00850                 address.s_addr = inet_addr(regNetworkProfile->ipSettings->address);
00851                 netmask.s_addr = inet_addr(regNetworkProfile->ipSettings->netmask);
00852                 broadcast.s_addr = address.s_addr | ~netmask.s_addr;
00853 
00854                 command[arg++] = "static";
00855                 command[arg++] = regNetworkProfile->ipSettings->address;
00856                 command[arg++] = regNetworkProfile->ipSettings->netmask;
00857                 command[arg++] = freelist[free_arg++] = strdup(inet_ntoa(broadcast));
00858                 command[arg++] = regNetworkProfile->ipSettings->gateway;
00859                 command[arg++] = regNetworkProfile->ipSettings->dns;
00860             }
00861             else
00862             {
00863                 command[arg++] = "dhcp";
00864             }
00865             break;
00866 
00867         case wireless_t:
00868             err = ECD_WIRELESS_ERROR;
00869             arg = 0;
00870             command[arg++] = COMMAND_WIRELESS;
00871             command[arg++] = "start";
00872             command[arg++] = regNetworkProfile->wirelessSettings->SSID;
00873 
00874             switch (regNetworkProfile->wirelessSettings->encrType)
00875             {
00876                 case encr_none_t:
00877                     /* ignore */ ;
00878                     break;
00879                 case encr_wep_t:
00880                     command[arg++] = "enc";
00881                     encrkey = regNetworkProfile->wirelessSettings->encrKey;
00882                     add_key_prefix(encrkey, &freelist[free_arg]);
00883                     command[arg++] = freelist[free_arg];
00884                     free_arg++;
00885                    break;
00886                 case encr_wpa_t:
00887                     command[arg++] = "wpa";
00888                     encrkey = regNetworkProfile->wirelessSettings->encrKey;
00889                     command[arg++] = encrkey;
00890                     break;
00891                 default:
00892                     // TODO: support these settings
00893                     CN_ERRORPRINTF("Support the ascii settings");
00894                     break;
00895             }
00896             break; // end wireless_t
00897 
00898         case dialup_t:
00899             err = ECD_DIALUP_ERROR;
00900             arg = 0;
00901             command[arg++] = COMMAND_DIALUP;
00902             command[arg++] = "start";
00903             command[arg++] = regNetworkProfile->dialupSettings->phone;
00904             command[arg++] = regNetworkProfile->dialupSettings->user;
00905             command[arg++] = regNetworkProfile->dialupSettings->password;
00906             break; // end dialup_t
00907 
00908         default:
00909             /* ignore, has been tested before */ ;
00910     }
00911   
00912     // now execute the command, at last
00913     command[arg] = NULL;
00914     if ((enable_pid = fork()) == 0)
00915     {
00916         printf("Execvp returned %d\n", execvp(command[0], command));
00917         printf("execvp error: %d %s", errno, strerror(errno));
00918         exit(1);
00919     }
00920     waitpid(enable_pid, &rc, 0);
00921     if (WIFEXITED(rc) && WEXITSTATUS(rc) == 0)
00922     {
00923         err = ECD_NO_ERROR;
00924     }
00925     enable_pid = 0;
00926 
00927     for (free_arg--; free_arg >= 0; free(freelist[free_arg--]));
00928 
00929     FILE *fd = fopen("/tmp/profile_name.tmp", "w");
00930     fputs(regNetworkProfile->name, fd);
00931     fputs("\n", fd);
00932     fclose(fd);
00933     
00934     CN_LOGPRINTF("done: err [%d]", err);
00935     return err;
00936 }

Here is the call graph for this function:

void connect_enable_network_abort ( void   ) 

Definition at line 685 of file connectionMgr.c.

00686 {
00687     // stop network enable, when needed
00688     if (enable_pid > 0)
00689     {
00690         CN_WARNPRINTF("Sending SIGTERM to enable_pid [%d]", enable_pid);
00691         kill(enable_pid, SIGTERM);
00692     }
00693 }

static void connectMessageReceived ( gpointer  data,
gint  source_fd,
GdkInputCondition  condition 
) [static]

Definition at line 579 of file connectionMgr.c.

00582 {
00583     char    szBuffer[SERVER_BUFFER_SIZE];
00584     int     nBuf = SERVER_BUFFER_SIZE;
00585     int     page;
00586     
00587     erIpcCmd_t command;
00588     //st_ContentType_e contentType;
00589 
00590     erIpcGetMessage((erServerChannel_t) data, szBuffer, &nBuf);
00591 
00592     CN_IPCPRINTF("Received %s\n", szBuffer);
00593 
00594     if (cnParseCommand(szBuffer, &command) >= 0)
00595     {
00596         switch (command.cc)
00597         {
00598             case ccCnGotoPage:
00599                 page = atoi(command.arg[0]);
00600                 CN_IPCPRINTF("Connect Goto Page: %d\n", page);
00601                 gdk_threads_enter();
00602                 on_goto_page(page);
00603                 gdk_threads_leave();
00604                 break;
00605            
00606             case ccCnToolbar:
00607                 {
00608                     int iconID    = atoi(command.arg[0]);
00609                     int iconState = atoi(command.arg[1]);
00610                     CN_LOGPRINTF("ccCnToolbarIcon: iconID [%d] iconState [%d]", 
00611                                   iconID, iconState);
00612                     gdk_threads_enter();
00613                     on_cmgr_icon_clicked(iconID, iconState);
00614                     gdk_threads_leave();
00615                 }
00616                 break;
00617 
00618             case ccCnToolbarSync:
00619                     gdk_threads_enter();
00620                     CN_LOGPRINTF("ccCnToolbarSync");
00621                     on_cmgr_toolbar_synchronised();
00622                     gdk_threads_leave();
00623                 break;
00624 
00625             default:
00626                 CN_IPCPRINTF("UNKNOWN COMMAND %d", command.cc);
00627                 break;
00628         }
00629     }
00630 }

Here is the call graph for this function:

gboolean connectStartIpcClientSetup (  ) 

Definition at line 562 of file connectionMgr.c.

00563 {
00564     int ret;
00565 
00566     CN_LOGPRINTF("entry\n");
00567 
00568     ret = erIpcStartClient(ER_SETUP_CHANNEL, &g_ipc_channel_setup);
00569     CN_IPCPRINTF("erIpcStartClient returned %d\n", ret);
00570 
00571     return (ret == 0) ? TRUE : FALSE;
00572 }

Here is the call graph for this function:

static void do_hide_keyboard ( int  iconState  )  [static]

Definition at line 464 of file connectionMgr.c.

00465 {
00466     g_assert((iconState == iconState_grey) 
00467             || (iconState == iconState_normal));
00468 
00469     // remove the old display update
00470     // keyboard will refresh the screen later
00471     keyboard_remove_idle_handler_ids();
00472 
00473     // block screen updates until keyboard hides
00474     display_update_increase_level(KEYBOARD_SHOW_HIDE_LEVEL);
00475 
00476     // update GTK objects then hide keyboard, 
00477     // rely on display update by keyboard
00478     g_hide_idle_handler_id = g_idle_add(on_idle_hide_keyboard, 
00479                                         (gpointer) iconState);
00480 }

Here is the call graph for this function:

static void do_show_keyboard (  )  [static]

Definition at line 418 of file connectionMgr.c.

00419 {
00420 
00421     // remove the old display update, 
00422     // keyboard will refresh the screen later
00423     keyboard_remove_idle_handler_ids();
00424 
00425     // block screen updates until keyboard shows
00426     display_update_increase_level(KEYBOARD_SHOW_HIDE_LEVEL);
00427     
00428     // update GTK objects then show keyboard,
00429     // rely on display update by keyboard
00430     g_show_idle_handler_id = g_idle_add(on_idle_show_keyboard, NULL);
00431 }

Here is the call graph for this function:

static gboolean hook_screen_refresh_typing ( GSignalInvocationHint *  ihint,
guint  n_param_values,
const GValue *  param_values,
gpointer  user_data 
) [static]

Definition at line 362 of file connectionMgr.c.

00366 {
00367     int level = (int)user_data;
00368 
00369     CN_LOGPRINTF("entry: level [%d]", level);
00370 
00371     display_update_request_screen_refresh(level, WAVEFORM_TYPING);
00372 
00373     return TRUE;  // TRUE = continue gtk signal handling
00374 }

Here is the call graph for this function:

static gboolean is_hex_key ( const char *  key  )  [static]

Definition at line 695 of file connectionMgr.c.

00696 {
00697     int i, len;
00698     gboolean ret = TRUE;
00699 
00700     if ((key == NULL) 
00701         || ((len = strlen(key)) == 0))
00702     {
00703         return TRUE;
00704     }
00705 
00706     for (i = 0; i < len; i++)
00707     {
00708         if (!isxdigit(key[i]))
00709         {
00710             ret = FALSE;
00711             break;
00712         }
00713     }
00714 
00715     CN_LOGPRINTF("return %d", ret);
00716     return ret;
00717 }

static gboolean keyboard_is_running ( void   )  [static]

Definition at line 400 of file connectionMgr.c.

00401 {
00402     const char *cmd = "ps -ef | grep matchbox-keyboard | grep -v grep";
00403     gboolean running = FALSE;
00404     
00405     if (system(cmd) == 0)
00406     {
00407         running = TRUE;
00408     }
00409 
00410     CN_LOGPRINTF("return %d", running);
00411     return running;
00412 }

static void keyboard_remove_idle_handler_ids ( void   )  [static]

Definition at line 379 of file connectionMgr.c.

00380 {
00381     if (g_show_idle_handler_id)
00382     {
00383         CN_DMPRINTF("\nRemoving the old show keyboard idle handler.\n");
00384        
00385         g_source_remove(g_show_idle_handler_id);
00386         g_show_idle_handler_id = 0;
00387     }
00388 
00389     if (g_hide_idle_handler_id)
00390     {
00391         CN_DMPRINTF("\nRemoving the old hide keyboard idle handler.\n");
00392 
00393         g_source_remove(g_hide_idle_handler_id);
00394         g_hide_idle_handler_id = 0;
00395     }
00396 
00397     display_update_remove_idle_handler_id();
00398 }

Here is the call graph for this function:

static void on_cmgr_icon_clicked ( int  iconID,
int  iconState 
) [static]

Definition at line 268 of file connectionMgr.c.

00269 {
00270     cmgrScreen_t mode;
00271 
00272     CN_LOGPRINTF("entry iconID[%d] iconState[%d]", iconID, iconState);
00273 
00274     mode = cmgr_get_screen_mode();
00275     switch (mode)
00276     {
00277         case cmgrScreenEdit_e:
00278             on_edit_icon_clicked(iconID, iconState); 
00279             break;
00280         case cmgrScreenConnect_e:
00281             on_connect_icon_clicked(iconID, iconState);
00282             break;
00283         default:
00284             break;
00285     }
00286 }

Here is the call graph for this function:

guint on_cmgr_keypress ( GtkWidget *  widget,
GdkEventKey *  event,
gpointer  data 
)

Definition at line 245 of file connectionMgr.c.

00248 {
00249     guint   returnValue = 0;    // return FALSE => default gtk handling
00250 
00251     CN_LOGPRINTF("entry");
00252 
00253     switch (cmgr_get_screen_mode())
00254     {
00255         case cmgrScreenConnect_e:
00256             returnValue = on_connect_keypress(event);
00257             break;
00258         case cmgrScreenEdit_e:
00259             returnValue = on_edit_keypress(event);
00260             break;
00261         default:
00262             /* ignore */ ;
00263     }
00264     
00265     return returnValue;
00266 }

Here is the call graph for this function:

static void on_cmgr_toolbar_synchronised ( void   )  [static]

Definition at line 288 of file connectionMgr.c.

00289 {
00290     CN_LOGPRINTF("entry");
00291 
00292     on_toolbar_synchronised();
00293 }

Here is the call graph for this function:

static gboolean on_delayed_cmgr_back_page ( gpointer  data  )  [static]

Definition at line 1228 of file connectionMgr.c.

01229 {
01230     screenPage_t curPage, backPage;
01231 
01232     CN_LOGPRINTF("entry");
01233 
01234     erbusy_blink();
01235 
01236     cmgr_get_cur_screen_page(&curPage);
01237     cmgr_get_back_page(&curPage, &backPage);
01238 
01239     // before back, restore the previous settings
01240     switch (curPage.screen)
01241     {
01242         case cmgrScreenEdit_e:
01243             edit_restore_network_settings(curPage.page);
01244             break;
01245         case cmgrScreenConnect_e:
01246             // nothing need to do
01247             break;
01248         default:
01249             break;
01250     }
01251 
01252     cmgr_goto_screen_page(&backPage);
01253 
01254     return FALSE;
01255 }

Here is the call graph for this function:

static void on_goto_page ( gint  new_page  )  [static]

Definition at line 345 of file connectionMgr.c.

00346 {
00347     CN_LOGPRINTF("entry");
00348 
00349     switch (cmgr_get_screen_mode())
00350     {
00351         case cmgrScreenConnect_e:
00352             on_connect_goto_page(new_page);
00353             break;
00354         case cmgrScreenEdit_e:
00355             on_edit_goto_page(new_page);
00356             break;
00357         default:
00358             /* ignore */ ;
00359     }
00360 }

Here is the call graph for this function:

static gboolean on_idle_hide_keyboard ( gpointer  data  )  [static]

Definition at line 482 of file connectionMgr.c.

00483 {
00484     gboolean running = keyboard_is_running();
00485     int iconState = (int)data;
00486 
00487     toolbar_setIconState(iconID_keyboard, iconState);
00488 
00489     if (!running)
00490     {
00491         // from hide to hide, keyboard doesn't do refresh the screen,
00492         // do it on connectionMgr side
00493         CN_DMPRINTF("\nfrom hide to hide, " 
00494                       "rely on cmgr refresh the screen\n");
00495         display_update_request_screen_refresh(KEYBOARD_SHOW_HIDE_LEVEL, 
00496                                          WAVEFORM_FULLSCREEN);
00497     }
00498     else
00499     {
00500         CN_DMPRINTF("\nfrom show to hide, "
00501                     "rely on keyboard refresh the screen\n");
00502         // allow display updates again
00503         display_update_decrease_level(LOWEST_LEVEL);
00504     }
00505 
00506     g_hide_idle_handler_id = 0;
00507     return FALSE;               // don't call me again
00508 }

Here is the call graph for this function:

static gboolean on_idle_show_keyboard ( gpointer  data  )  [static]

Definition at line 433 of file connectionMgr.c.

00434 {
00435     gboolean running = keyboard_is_running();
00436 
00437     toolbar_setIconState(iconID_keyboard, iconState_selected);
00438 
00439     if (running)
00440     {
00441         // from show to show, keyboard doesn't refresh the screen,
00442         // do it on connectionMgr side
00443         CN_DMPRINTF("\nfrom show to show, " 
00444                     "rely on cmgr refresh the screen\n");
00445         display_update_request_screen_refresh(KEYBOARD_SHOW_HIDE_LEVEL, 
00446                                               WAVEFORM_FULLSCREEN);
00447     }
00448     else
00449     {
00450         CN_DMPRINTF("\nfrom hide to show, "
00451                     "rely on keyboard refresh the screen\n");
00452         // allow display updates again
00453         display_update_decrease_level(LOWEST_LEVEL);
00454     }
00455 
00456     g_show_idle_handler_id = 0;
00457     return FALSE;               // don't call me again
00458 }

Here is the call graph for this function:

static void on_toolbar_synchronised ( void   )  [static]

Definition at line 320 of file connectionMgr.c.

00321 {
00322     int elementSize, arraySize;
00323     int i, sz;
00324 
00325     CN_LOGPRINTF("entry");
00326 
00327     display_update_request_screen_refresh(TEXT_ENTRY_CHANGED_LEVEL, 
00328                                           WAVEFORM_TYPING);
00329 
00330     elementSize = sizeof(on_toolbar_sync_actions[0]);
00331     arraySize = sizeof(on_toolbar_sync_actions);
00332     sz = arraySize / elementSize;
00333 
00334     // call functions for registered on_toolbar_sync_actions
00335     for (i = 0; i < sz; i++)
00336     {
00337         if (on_toolbar_sync_actions[i] != NULL)
00338         {
00339             on_toolbar_sync_actions[i] ();
00340             on_toolbar_sync_actions[i] = NULL;
00341         }
00342     }
00343 }

Here is the call graph for this function:

void show_keyboard ( gboolean  show  ) 

Definition at line 511 of file connectionMgr.c.

00512 {
00513     CN_LOGPRINTF("entry: show [%d]", show);
00514 
00515     if (show)
00516     {
00517         // keyboard requested
00518         do_show_keyboard();
00519     }
00520     else
00521     {
00522         // keyboard not requested
00523         do_hide_keyboard(iconState_grey);
00524     }
00525 }

Here is the call graph for this function:


Variable Documentation

volatile int enable_pid = 0 [static]

Definition at line 68 of file connectionMgr.c.

GtkWidget* g_connectScreens = NULL [static]

Definition at line 60 of file connectionMgr.c.

GtkWidget* g_editScreens = NULL [static]

Definition at line 61 of file connectionMgr.c.

guint g_hide_idle_handler_id = 0 [static]

Definition at line 74 of file connectionMgr.c.

Definition at line 91 of file connectionMgr.c.

pingContext_t* g_ping_ctxt = NULL [static]

Definition at line 66 of file connectionMgr.c.

scanContext_t* g_scan_ctxt = NULL [static]

Definition at line 65 of file connectionMgr.c.

cmgrScreen_t g_screen_mode = cmgrScreenUndef_e [static]

Definition at line 62 of file connectionMgr.c.

guint g_show_idle_handler_id = 0 [static]

Definition at line 73 of file connectionMgr.c.

on_tbsync_action_t on_toolbar_sync_actions[] = { NULL, NULL } [static]

Definition at line 71 of file connectionMgr.c.

Definition at line 90 of file connectionMgr.c.


Generated on Sun Dec 14 17:15:57 2008 by  doxygen 1.5.6