1974 lines
48 KiB
C
1974 lines
48 KiB
C
/****************************************************************************
|
|
* NCSA Mosaic for the X Window System *
|
|
* Software Development Group *
|
|
* National Center for Supercomputing Applications *
|
|
* University of Illinois at Urbana-Champaign *
|
|
* 605 E. Springfield, Champaign IL 61820 *
|
|
* mosaic@ncsa.uiuc.edu *
|
|
* *
|
|
* Copyright 1993-1995, Board of Trustees of the University of Illinois *
|
|
* *
|
|
* NCSA Mosaic software, both binary and source (hereafter, Software) is *
|
|
* copyrighted by The Board of Trustees of the University of Illinois *
|
|
* (UI), and ownership remains with the UI. *
|
|
* *
|
|
* The UI grants you (hereafter, Licensee) a license to use the Software *
|
|
* for academic, research and internal business purposes only, without a *
|
|
* fee. Licensee may distribute the binary and source code (if released) *
|
|
* to third parties provided that the copyright notice and this statement *
|
|
* appears on all copies and that no charge is associated with such *
|
|
* copies. *
|
|
* *
|
|
* Licensee may make derivative works. However, if Licensee distributes *
|
|
* any derivative work based on or derived from the Software, then *
|
|
* Licensee will (1) notify NCSA regarding its distribution of the *
|
|
* derivative work, and (2) clearly notify users that such derivative *
|
|
* work is a modified version and not the original NCSA Mosaic *
|
|
* distributed by the UI. *
|
|
* *
|
|
* Any Licensee wishing to make commercial use of the Software should *
|
|
* contact the UI, c/o NCSA, to negotiate an appropriate license for such *
|
|
* commercial use. Commercial use includes (1) integration of all or *
|
|
* part of the source code into a product for sale or license by or on *
|
|
* behalf of Licensee to third parties, or (2) distribution of the binary *
|
|
* code or source code to third parties that need it to utilize a *
|
|
* commercial product sold or licensed by or on behalf of Licensee. *
|
|
* *
|
|
* UI MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE FOR *
|
|
* ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED *
|
|
* WARRANTY. THE UI SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY THE *
|
|
* USERS OF THIS SOFTWARE. *
|
|
* *
|
|
* By using or copying this Software, Licensee agrees to abide by the *
|
|
* copyright law and all other applicable laws of the U.S. including, but *
|
|
* not limited to, export control laws, and the terms of this license. *
|
|
* UI shall have the right to terminate this license immediately by *
|
|
* written notice upon Licensee's breach of, or non-compliance with, any *
|
|
* of its terms. Licensee may be held legally responsible for any *
|
|
* copyright infringement that is caused or encouraged by Licensee's *
|
|
* failure to abide by the terms of this license. *
|
|
* *
|
|
* Comments and questions are welcome and can be sent to *
|
|
* mosaic-x@ncsa.uiuc.edu. *
|
|
****************************************************************************/
|
|
#include "../config.h"
|
|
#include <stdio.h>
|
|
#include <Xm/PanedW.h>
|
|
#include <Xm/PushB.h>
|
|
#include <Xm/ToggleB.h>
|
|
#include <Xm/Form.h>
|
|
#include <Xm/DialogS.h>
|
|
#include <Xm/List.h>
|
|
#include <Xm/MenuShell.h>
|
|
#include <Xm/Separator.h>
|
|
#include <Xm/RowColumn.h>
|
|
#include <Xm/Text.h>
|
|
#include <Xm/TextF.h>
|
|
#include <Xm/Frame.h>
|
|
#include <Xm/Label.h>
|
|
#include <Xm/MessageB.h>
|
|
|
|
#ifdef __bsdi__
|
|
#include <sys/malloc.h>
|
|
#else
|
|
#include <malloc.h>
|
|
#endif
|
|
#include <string.h>
|
|
#include "proxy.h"
|
|
#include "mosaic.h"
|
|
|
|
#define EDIT_ERROR "No entry in the proxy list is currently selected.\n\nTo edit an entry in the proxy list, select\nit with a double mouse click."
|
|
|
|
#define SAVE_ERROR "You do not have permission to write the\nfile %s to disk."
|
|
|
|
#define SAVED_AOK "%s has been saved."
|
|
|
|
#define REMOVE_ERROR "No entry in the list is currently selected.\n\nTo remove an entry in the list, select\n it and then click on the remove widget."
|
|
#define COMMIT_PROXY_EMPTY_ERROR "A scheme must be specified for this proxy entry."
|
|
#define COMMIT_ADDR_EMPTY_ERROR "An address must be specified for this proxy entry."
|
|
#define COMMIT_PORT_EMPTY_ERROR "A port number must be specified for this proxy entry."
|
|
|
|
#define COMMIT_DOMAIN_EMPTY_ERROR "A domain must be specified for this entry."
|
|
|
|
#define EDIT 0
|
|
#define ADD 1
|
|
|
|
extern struct Proxy *proxy_list, *noproxy_list;
|
|
static struct ProxyDomain *pdList = NULL;
|
|
|
|
Widget ProxyDialog, EditProxyDialog, EditNoProxyDialog, EditProxyDomainDialog;
|
|
|
|
struct InfoFields {
|
|
Widget proxy_text;
|
|
Widget addr_text;
|
|
Widget port_text;
|
|
Widget alive;
|
|
Widget domain_text;
|
|
Widget trans_menu;
|
|
};
|
|
|
|
struct EditInfo {
|
|
int fProxy; /* Is this a Proxy List Dialog? */
|
|
int type; /* Is this an Edit or an Add ? */
|
|
int domaintype; /* Is this an Edit or an Add ? */
|
|
char *help_file;
|
|
Widget scrolled;
|
|
Widget translation;
|
|
struct Proxy *editing;
|
|
struct InfoFields *IF;
|
|
struct ProxyDomain *editingDomain;
|
|
struct Proxy *proxy_list;
|
|
};
|
|
|
|
|
|
void AddProxyToList(), ShowProxyList(), EditProxyInfo(), CommitProxyInfo(),
|
|
DismissProxy(), ClearProxyText(), FillProxyText(), WriteProxies(),
|
|
RemoveProxyInfo(), EditProxyDomainInfo(), DisplayErrorMessage(),
|
|
ShowProxyDomainList(), CommitProxyDomainInfo(),
|
|
CallEdit(), CallAdd(), CallEditDomain(), CallAddDomain(),
|
|
CallRemoveProxy(), DestroyDialog(), PopProxyDialog(), DeleteProxy(),
|
|
EditNoProxyInfo(), CenterDialog(), ProxyHelpWindow(), HelpWindow(),
|
|
DisableProxy();
|
|
|
|
#ifdef OTHER_TRANSPORT
|
|
void SetOptionMenuButtonLabel();
|
|
#endif
|
|
|
|
struct Proxy *FindProxyEntry();
|
|
struct ProxyDomain *FindProxyDomainEntry();
|
|
|
|
static mo_window *mo_main_window;
|
|
|
|
void
|
|
ShowProxyDialog(mo_window *win)
|
|
{
|
|
PopProxyDialog(win, proxy_list, TRUE);
|
|
}
|
|
|
|
void
|
|
ShowNoProxyDialog(mo_window *win)
|
|
{
|
|
PopProxyDialog(win, noproxy_list, FALSE);
|
|
}
|
|
|
|
void
|
|
PopProxyDialog(mo_window *win, struct Proxy *list, int fProxy)
|
|
{
|
|
Widget main_form, proxy_form, action_area, text_form;
|
|
Widget add, edit, remove, dismiss, help;
|
|
Widget save;
|
|
Widget scrolled;
|
|
|
|
int size, i, n;
|
|
Arg args[20];
|
|
|
|
XmStringTable string_list;
|
|
struct Proxy *pCurrent;
|
|
static struct EditInfo *pEditInfo, *pAddInfo;
|
|
|
|
XFontStruct *font;
|
|
XmFontList *fontlist;
|
|
|
|
static int fProxyDialog = 0;
|
|
|
|
mo_main_window = win;
|
|
|
|
if (fProxyDialog) {
|
|
pEditInfo->proxy_list = list;
|
|
pEditInfo->fProxy = fProxy;
|
|
|
|
if (fProxy)
|
|
pEditInfo->help_file = "help-proxylist.html";
|
|
else
|
|
pEditInfo->help_file = "help-noproxylist.html";
|
|
ShowProxyList(pEditInfo);
|
|
XtPopup(ProxyDialog, XtGrabNone);
|
|
return;
|
|
}
|
|
|
|
/*
|
|
** Try and get a nice non-proportional font. If we can't get
|
|
** it, then the heck with it, just use the default.
|
|
*/
|
|
font = XLoadQueryFont(XtDisplay(win->base), FONTNAME);
|
|
if (font == NULL) {
|
|
font = XLoadQueryFont(XtDisplay(win->base), "fixed");
|
|
}
|
|
if (font != NULL) {
|
|
fontlist = (XmFontList *)XmFontListCreate(font, XmSTRING_DEFAULT_CHARSET);
|
|
}
|
|
|
|
ProxyDialog = XtVaCreatePopupShell("Proxies",
|
|
xmDialogShellWidgetClass, XtParent(win->base),
|
|
XmNdeleteResponse, XmDESTROY,
|
|
XmNtitle, "Proxies",
|
|
NULL);
|
|
|
|
|
|
fProxyDialog = 1;
|
|
|
|
main_form = XtVaCreateWidget("proxy_form",
|
|
xmFormWidgetClass, ProxyDialog,
|
|
NULL);
|
|
|
|
/*
|
|
** Create action area widgets
|
|
*/
|
|
action_area = XtVaCreateWidget("proxy_action",
|
|
xmFormWidgetClass, main_form,
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNfractionBase, 6,
|
|
NULL);
|
|
|
|
save = XtVaCreateManagedWidget("Save",
|
|
xmPushButtonWidgetClass, action_area,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 1,
|
|
XmNrightAttachment, XmATTACH_POSITION,
|
|
XmNrightPosition, 2,
|
|
XmNshowAsDefault, True,
|
|
XmNdefaultButtonShadowThickness, 1,
|
|
NULL);
|
|
|
|
edit = XtVaCreateManagedWidget("Edit",
|
|
xmPushButtonWidgetClass, action_area,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 2,
|
|
XmNrightAttachment, XmATTACH_POSITION,
|
|
XmNrightPosition, 3,
|
|
XmNshowAsDefault, True,
|
|
XmNdefaultButtonShadowThickness, 1,
|
|
NULL);
|
|
|
|
add = XtVaCreateManagedWidget("Add",
|
|
xmPushButtonWidgetClass, action_area,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 3,
|
|
XmNrightAttachment, XmATTACH_POSITION,
|
|
XmNrightPosition, 4,
|
|
XmNshowAsDefault, True,
|
|
XmNdefaultButtonShadowThickness, 1,
|
|
NULL);
|
|
|
|
remove = XtVaCreateManagedWidget("Remove",
|
|
xmPushButtonWidgetClass, action_area,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 4,
|
|
XmNrightAttachment, XmATTACH_POSITION,
|
|
XmNrightPosition, 5,
|
|
XmNshowAsDefault, True,
|
|
XmNdefaultButtonShadowThickness, 1,
|
|
NULL);
|
|
|
|
dismiss = XtVaCreateManagedWidget("Dismiss",
|
|
xmPushButtonWidgetClass, action_area,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 0,
|
|
XmNrightAttachment, XmATTACH_POSITION,
|
|
XmNrightPosition, 1,
|
|
XmNshowAsDefault, True,
|
|
XmNdefaultButtonShadowThickness, 1,
|
|
NULL);
|
|
|
|
help = XtVaCreateManagedWidget("Help...",
|
|
xmPushButtonWidgetClass, action_area,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 5,
|
|
XmNrightAttachment, XmATTACH_POSITION,
|
|
XmNrightPosition, 6,
|
|
XmNshowAsDefault, True,
|
|
XmNdefaultButtonShadowThickness, 1,
|
|
NULL);
|
|
|
|
XtManageChild(action_area);
|
|
|
|
/*
|
|
** Create Scrolled List
|
|
*/
|
|
|
|
n = 0;
|
|
|
|
XtSetArg(args[n], XmNwidth, 150); n++;
|
|
XtSetArg(args[n], XmNvisibleItemCount, 10); n++;
|
|
XtSetArg(args[n], XmNmargin, 1); n++;
|
|
XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
|
|
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
|
|
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
|
|
XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
|
|
XtSetArg(args[n], XmNbottomWidget, action_area); n++;
|
|
if (font)
|
|
XtSetArg(args[n], XmNfontList, fontlist); n++;
|
|
|
|
scrolled = XmCreateScrolledList(main_form, "proxy_info", args, n);
|
|
|
|
XtManageChild(scrolled);
|
|
|
|
pEditInfo = (struct EditInfo *)calloc(1,sizeof(struct EditInfo));
|
|
pEditInfo->scrolled = scrolled;
|
|
pEditInfo->proxy_list = list;
|
|
pEditInfo->fProxy = fProxy;
|
|
if (fProxy)
|
|
pEditInfo->help_file = "help-proxylist.html";
|
|
else
|
|
pEditInfo->help_file = "help-noproxylist.html";
|
|
|
|
|
|
XtAddCallback(edit, XmNactivateCallback, CallEdit, pEditInfo);
|
|
XtAddCallback(scrolled, XmNdefaultActionCallback, CallEdit, pEditInfo);
|
|
|
|
XtAddCallback(add, XmNactivateCallback, CallAdd, pEditInfo);
|
|
|
|
XtAddCallback(remove, XmNactivateCallback, CallRemoveProxy, pEditInfo);
|
|
XtAddCallback(dismiss, XmNactivateCallback, DismissProxy, ProxyDialog);
|
|
XtAddCallback(save, XmNactivateCallback, WriteProxies, pEditInfo);
|
|
XtAddCallback(ProxyDialog, XmNdestroyCallback, DestroyDialog, &fProxyDialog);
|
|
XtAddCallback(ProxyDialog, XmNpopupCallback, CenterDialog, NULL);
|
|
|
|
XtAddCallback(help, XmNactivateCallback, ProxyHelpWindow, pEditInfo);
|
|
|
|
XtManageChild(main_form);
|
|
|
|
ShowProxyList(pEditInfo);
|
|
|
|
XtPopup(ProxyDialog, XtGrabNone);
|
|
}
|
|
|
|
void
|
|
ProxyHelpWindow(Widget w, XtPointer client, XtPointer call)
|
|
{
|
|
char *html_file = ((struct EditInfo *)client)->help_file;
|
|
HelpWindow(w, html_file, call);
|
|
}
|
|
|
|
void
|
|
HelpWindow(Widget w, XtPointer client, XtPointer call)
|
|
{
|
|
char *html_file = (char *)client;
|
|
|
|
mo_open_another_window(mo_main_window, mo_assemble_help_url(html_file),
|
|
NULL, NULL);
|
|
}
|
|
|
|
void
|
|
CenterDialog(Widget dialog, XtPointer client, XtPointer call)
|
|
{
|
|
Position x, y;
|
|
Dimension width, height;
|
|
Dimension dia_width, dia_height;
|
|
Position center_x, center_y, dia_center_x, dia_center_y;
|
|
|
|
XtVaGetValues(mo_main_window->base,
|
|
XmNx, &x,
|
|
XmNy, &y,
|
|
XmNwidth, &width,
|
|
XmNheight, &height,
|
|
NULL);
|
|
|
|
XtVaGetValues(dialog,
|
|
XmNwidth, &dia_width,
|
|
XmNheight, &dia_height,
|
|
NULL);
|
|
|
|
center_x = width/2;
|
|
center_y = height/2;
|
|
|
|
dia_center_x = center_x - (dia_width/2);
|
|
dia_center_y = center_y - (dia_height/2);
|
|
|
|
dia_center_x += x;
|
|
dia_center_y += y;
|
|
|
|
XtVaSetValues(dialog,
|
|
XmNx, dia_center_x,
|
|
XmNy, dia_center_y,
|
|
NULL);
|
|
}
|
|
|
|
void
|
|
CallEdit(Widget w, XtPointer client, XtPointer call)
|
|
{
|
|
struct EditInfo *pEditInfo;
|
|
|
|
pEditInfo = (struct EditInfo *)client;
|
|
|
|
if (pEditInfo->fProxy)
|
|
EditProxyInfo(w, client, call, EDIT);
|
|
else
|
|
EditNoProxyInfo(w, client, call, EDIT);
|
|
}
|
|
|
|
void
|
|
CallAdd(Widget w, XtPointer client, XtPointer call)
|
|
{
|
|
struct EditInfo *pEditInfo;
|
|
struct ProxyDomain *p, *next;
|
|
|
|
pEditInfo = (struct EditInfo *)client;
|
|
|
|
if (pdList != NULL) {
|
|
p = pdList;
|
|
while (p != NULL) {
|
|
next = p->next;
|
|
DeleteProxyDomain(p);
|
|
p = next;
|
|
}
|
|
pdList = NULL;
|
|
}
|
|
|
|
if (pEditInfo->fProxy)
|
|
EditProxyInfo(w, client, call, ADD);
|
|
else
|
|
EditNoProxyInfo(w, client, call, ADD);
|
|
}
|
|
|
|
void
|
|
CallRemoveProxy(Widget w, XtPointer client, XtPointer call)
|
|
{
|
|
RemoveProxyInfo(w, client, call, PROXY);
|
|
}
|
|
|
|
void
|
|
CallRemoveProxyDomain(Widget w, XtPointer client, XtPointer call)
|
|
{
|
|
RemoveProxyInfo(w, client, call, PROXY_DOMAIN);
|
|
}
|
|
|
|
|
|
XmString
|
|
GetStringFromScrolled(Widget w)
|
|
{
|
|
struct Proxy *p;
|
|
int selected_count;
|
|
XmStringTable selected_table;
|
|
|
|
XtVaGetValues(w,
|
|
XmNselectedItemCount, &selected_count,
|
|
XmNselectedItems, &selected_table,
|
|
NULL);
|
|
|
|
if (selected_count == 0)
|
|
return NULL;
|
|
|
|
return selected_table[0];
|
|
}
|
|
|
|
void
|
|
EditNoProxyInfo(w, client, call, type)
|
|
Widget w;
|
|
XtPointer client;
|
|
XtPointer call;
|
|
int type;
|
|
{
|
|
Widget text_form, form, protocol, address, port, trans;
|
|
Widget trans_rc, label;
|
|
Widget main_form, rc, rc2, rc3;
|
|
Widget action_area, sep, dismiss, help;
|
|
Widget commit;
|
|
|
|
static Widget add, remove, edit;
|
|
|
|
XmString trans_string, http_string, cci_string, selected_string;
|
|
char *selected_text;
|
|
|
|
struct EditInfo *pEditInfo, *pEditDomainInfo, *pAddDomainInfo;
|
|
struct InfoFields *IF;
|
|
|
|
static int fEditProxyDialog = 0;
|
|
|
|
/*
|
|
** We obtain information from the client pointer, rather than getting
|
|
** it from call->item because this routine can be called from
|
|
** a pushbutton as well as from double clicking the list.
|
|
*/
|
|
|
|
pEditInfo = (struct EditInfo *)client;
|
|
|
|
pEditInfo->type = type;
|
|
if (type == EDIT) {
|
|
selected_string = GetStringFromScrolled((Widget)pEditInfo->scrolled);
|
|
|
|
if (selected_string == NULL) {
|
|
XmxMakeErrorDialog(mo_main_window->base, EDIT_ERROR, "No Entry Selected");
|
|
XtManageChild (Xmx_w);
|
|
return;
|
|
}
|
|
|
|
XmStringGetLtoR(selected_string, XmSTRING_DEFAULT_CHARSET,
|
|
&selected_text);
|
|
|
|
pEditInfo->editing = FindProxyEntry(pEditInfo, selected_text);
|
|
|
|
XtFree(selected_text);
|
|
|
|
if (pEditInfo->editing == NULL)
|
|
return; /* how did *that* happen? */
|
|
} else {
|
|
pEditInfo->editing = NULL;
|
|
}
|
|
|
|
if (fEditProxyDialog) {
|
|
|
|
if (type == EDIT)
|
|
FillProxyText(pEditInfo);
|
|
else
|
|
ClearProxyText(pEditInfo);
|
|
|
|
XtPopup(EditNoProxyDialog, XtGrabNone);
|
|
return;
|
|
}
|
|
|
|
EditNoProxyDialog = XtVaCreatePopupShell("Proxies",
|
|
xmDialogShellWidgetClass, XtParent(w),
|
|
XmNdeleteResponse, XmDESTROY,
|
|
XmNtitle, "No_Proxy Information",
|
|
NULL);
|
|
|
|
fEditProxyDialog = 1;
|
|
main_form = XtVaCreateWidget("edit_form",
|
|
xmFormWidgetClass, EditNoProxyDialog,
|
|
NULL);
|
|
/*
|
|
** Create action area widgets
|
|
*/
|
|
action_area = XtVaCreateWidget("edit_action",
|
|
xmFormWidgetClass, main_form,
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNfractionBase, 3,
|
|
NULL);
|
|
|
|
sep = XtVaCreateManagedWidget("separator",
|
|
xmSeparatorWidgetClass, action_area,
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
NULL);
|
|
|
|
commit = XtVaCreateManagedWidget("Commit",
|
|
xmPushButtonWidgetClass, action_area,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 1,
|
|
XmNrightAttachment, XmATTACH_POSITION,
|
|
XmNrightPosition, 2,
|
|
XmNshowAsDefault, True,
|
|
XmNdefaultButtonShadowThickness, 1,
|
|
NULL);
|
|
|
|
dismiss = XtVaCreateManagedWidget("Abort",
|
|
xmPushButtonWidgetClass, action_area,
|
|
XmNtopAttachment, XmATTACH_WIDGET,
|
|
XmNtopWidget, sep,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 0,
|
|
XmNrightAttachment, XmATTACH_POSITION,
|
|
XmNrightPosition, 1,
|
|
XmNshowAsDefault, True,
|
|
XmNdefaultButtonShadowThickness, 1,
|
|
NULL);
|
|
|
|
help = XtVaCreateManagedWidget("Help...",
|
|
xmPushButtonWidgetClass, action_area,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 2,
|
|
XmNrightAttachment, XmATTACH_POSITION,
|
|
XmNrightPosition, 3,
|
|
XmNshowAsDefault, True,
|
|
XmNdefaultButtonShadowThickness, 1,
|
|
NULL);
|
|
|
|
XtManageChild(action_area);
|
|
|
|
rc = XtVaCreateWidget("rowcolumn",
|
|
xmRowColumnWidgetClass, main_form,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNorientation, XmHORIZONTAL,
|
|
XmNbottomAttachment, XmATTACH_WIDGET,
|
|
XmNbottomWidget, action_area,
|
|
NULL);
|
|
|
|
text_form = XtVaCreateWidget("text_form",
|
|
xmFormWidgetClass, rc,
|
|
NULL);
|
|
|
|
rc2 = XtVaCreateWidget("rowcolumn2",
|
|
xmRowColumnWidgetClass, text_form,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
NULL);
|
|
|
|
pEditInfo->IF = (struct InfoFields *)calloc(1,sizeof(struct InfoFields));
|
|
|
|
pEditInfo->IF->proxy_text = NULL;
|
|
pEditInfo->IF->domain_text = NULL;
|
|
pEditInfo->IF->trans_menu = NULL;
|
|
pEditInfo->IF->alive = NULL;
|
|
|
|
form = XtVaCreateWidget("form1",
|
|
xmFormWidgetClass, rc2,
|
|
XmNfractionBase, 10,
|
|
NULL);
|
|
|
|
address = XtVaCreateManagedWidget("Address",
|
|
xmLabelWidgetClass, form,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 0,
|
|
XmNalignment, XmALIGNMENT_END,
|
|
NULL);
|
|
|
|
pEditInfo->IF->addr_text = XtVaCreateManagedWidget("addr_text",
|
|
xmTextFieldWidgetClass, form,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 3,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
NULL);
|
|
|
|
XtManageChild(form);
|
|
|
|
form = XtVaCreateWidget("form2",
|
|
xmFormWidgetClass, rc2,
|
|
XmNfractionBase, 10,
|
|
NULL);
|
|
|
|
port = XtVaCreateManagedWidget("Port",
|
|
xmLabelWidgetClass, form,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 0,
|
|
XmNalignment, XmALIGNMENT_END,
|
|
NULL);
|
|
|
|
pEditInfo->IF->port_text = XtVaCreateManagedWidget("port_text",
|
|
xmTextFieldWidgetClass, form,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 3,
|
|
XmNmaxLength, 5,
|
|
XmNcolumns, 6,
|
|
NULL);
|
|
XtManageChild(form);
|
|
|
|
XtManageChild(rc2);
|
|
|
|
XtManageChild(text_form);
|
|
|
|
|
|
XtManageChild(rc);
|
|
XtManageChild(main_form);
|
|
|
|
XtAddCallback(commit, XmNactivateCallback, CommitProxyInfo, pEditInfo);
|
|
XtAddCallback(dismiss, XmNactivateCallback, DismissProxy, EditNoProxyDialog);
|
|
XtAddCallback(EditNoProxyDialog, XmNdestroyCallback, DestroyDialog, &fEditProxyDialog);
|
|
XtAddCallback(EditNoProxyDialog, XmNpopupCallback, CenterDialog, NULL);
|
|
XtAddCallback(help, XmNactivateCallback, HelpWindow, "help-noproxy-edit.html");
|
|
|
|
if (type == EDIT)
|
|
FillProxyText(pEditInfo);
|
|
else
|
|
ClearProxyText(pEditInfo);
|
|
|
|
XtPopup(EditNoProxyDialog, XtGrabNone);
|
|
}
|
|
|
|
void
|
|
EditProxyInfo(w, client, call, type)
|
|
Widget w;
|
|
XtPointer client;
|
|
XtPointer call;
|
|
int type;
|
|
{
|
|
Widget text_form, form, protocol, address, port, alive, trans;
|
|
Widget trans_rc, label;
|
|
Widget main_form, rc, rc2, rc3;
|
|
Widget action_area, sep, dismiss, help;
|
|
Widget commit;
|
|
|
|
static Widget add, remove, edit;
|
|
|
|
XmString trans_string, http_string, cci_string, selected_string;
|
|
char *selected_text;
|
|
|
|
struct EditInfo *pEditInfo, *pEditDomainInfo, *pAddDomainInfo;
|
|
struct InfoFields *IF;
|
|
|
|
#ifdef OTHER_TRANSPORT
|
|
int trans_val;
|
|
#endif
|
|
|
|
static int fEditProxyDialog = 0;
|
|
|
|
/*
|
|
** We obtain information from the client pointer, rather than getting
|
|
** it from call->item because this routine can be called from
|
|
** a pushbutton as well as from double clicking the list.
|
|
*/
|
|
|
|
pEditInfo = (struct EditInfo *)client;
|
|
|
|
pEditInfo->type = type;
|
|
if (type == EDIT) {
|
|
selected_string = GetStringFromScrolled((Widget)pEditInfo->scrolled);
|
|
|
|
if (selected_string == NULL) {
|
|
XmxMakeErrorDialog(mo_main_window->base, EDIT_ERROR, "No Entry Selected");
|
|
XtManageChild (Xmx_w);
|
|
return;
|
|
}
|
|
|
|
XmStringGetLtoR(selected_string, XmSTRING_DEFAULT_CHARSET,
|
|
&selected_text);
|
|
|
|
pEditInfo->editing = FindProxyEntry(pEditInfo, selected_text);
|
|
|
|
XtFree(selected_text);
|
|
|
|
if (pEditInfo->editing == NULL)
|
|
return; /* how did *that* happen? */
|
|
} else {
|
|
pEditInfo->editing = NULL;
|
|
}
|
|
|
|
if (fEditProxyDialog) {
|
|
|
|
if (type == EDIT) {
|
|
FillProxyText(pEditInfo);
|
|
#ifdef OTHER_TRANSPORT
|
|
SetOptionMenuButtonLabel(pEditInfo->IF->trans_menu, pEditInfo->editing->transport);
|
|
#endif
|
|
} else {
|
|
ClearProxyText(pEditInfo);
|
|
|
|
#ifdef OTHER_TRANSPORT
|
|
SetOptionMenuButtonLabel(pEditInfo->IF->trans_menu, "http");
|
|
#endif
|
|
}
|
|
|
|
XtPopup(EditProxyDialog, XtGrabNone);
|
|
return;
|
|
}
|
|
|
|
EditProxyDialog = XtVaCreatePopupShell("Proxies",
|
|
xmDialogShellWidgetClass, XtParent(w),
|
|
XmNdeleteResponse, XmDESTROY,
|
|
XmNtitle, "Proxy Information",
|
|
NULL);
|
|
|
|
fEditProxyDialog = 1;
|
|
main_form = XtVaCreateWidget("edit_form",
|
|
xmFormWidgetClass, EditProxyDialog,
|
|
NULL);
|
|
/*
|
|
** Create action area widgets
|
|
*/
|
|
action_area = XtVaCreateWidget("edit_action",
|
|
xmFormWidgetClass, main_form,
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNfractionBase, 3,
|
|
NULL);
|
|
|
|
sep = XtVaCreateManagedWidget("separator",
|
|
xmSeparatorWidgetClass, action_area,
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
NULL);
|
|
|
|
commit = XtVaCreateManagedWidget("Commit",
|
|
xmPushButtonWidgetClass, action_area,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 1,
|
|
XmNrightAttachment, XmATTACH_POSITION,
|
|
XmNrightPosition, 2,
|
|
XmNshowAsDefault, True,
|
|
XmNdefaultButtonShadowThickness, 1,
|
|
NULL);
|
|
|
|
dismiss = XtVaCreateManagedWidget("Abort",
|
|
xmPushButtonWidgetClass, action_area,
|
|
XmNtopAttachment, XmATTACH_WIDGET,
|
|
XmNtopWidget, sep,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 0,
|
|
XmNrightAttachment, XmATTACH_POSITION,
|
|
XmNrightPosition, 1,
|
|
XmNshowAsDefault, True,
|
|
XmNdefaultButtonShadowThickness, 1,
|
|
NULL);
|
|
|
|
help = XtVaCreateManagedWidget("Help...",
|
|
xmPushButtonWidgetClass, action_area,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 2,
|
|
XmNrightAttachment, XmATTACH_POSITION,
|
|
XmNrightPosition, 3,
|
|
XmNshowAsDefault, True,
|
|
XmNdefaultButtonShadowThickness, 1,
|
|
NULL);
|
|
|
|
XtManageChild(action_area);
|
|
|
|
rc = XtVaCreateWidget("rowcolumn",
|
|
xmRowColumnWidgetClass, main_form,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNorientation, XmHORIZONTAL,
|
|
XmNbottomAttachment, XmATTACH_WIDGET,
|
|
XmNbottomWidget, action_area,
|
|
NULL);
|
|
|
|
text_form = XtVaCreateWidget("text_form",
|
|
xmFormWidgetClass, rc,
|
|
NULL);
|
|
|
|
rc2 = XtVaCreateWidget("rowcolumn2",
|
|
xmRowColumnWidgetClass, text_form,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
NULL);
|
|
|
|
form = XtVaCreateWidget("form1",
|
|
xmFormWidgetClass, rc2,
|
|
XmNfractionBase, 10,
|
|
NULL);
|
|
|
|
protocol = XtVaCreateManagedWidget("Scheme",
|
|
xmLabelWidgetClass, form,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 0,
|
|
XmNalignment, XmALIGNMENT_END,
|
|
NULL);
|
|
|
|
pEditInfo->IF = (struct InfoFields *)calloc(1,sizeof(struct InfoFields));
|
|
|
|
pEditInfo->IF->proxy_text= XtVaCreateManagedWidget("proxy_text",
|
|
xmTextFieldWidgetClass, form,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 3,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
NULL);
|
|
|
|
XtManageChild(form);
|
|
|
|
form = XtVaCreateWidget("form2",
|
|
xmFormWidgetClass, rc2,
|
|
XmNfractionBase, 10,
|
|
NULL);
|
|
|
|
label = XtVaCreateManagedWidget("Proxy",
|
|
xmLabelWidgetClass, form,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 0,
|
|
XmNalignment, XmALIGNMENT_BEGINNING,
|
|
NULL);
|
|
|
|
address = XtVaCreateManagedWidget("Address",
|
|
xmLabelWidgetClass, form,
|
|
XmNtopAttachment, XmATTACH_WIDGET,
|
|
XmNtopWidget, label,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 0,
|
|
XmNalignment, XmALIGNMENT_BEGINNING,
|
|
NULL);
|
|
|
|
pEditInfo->IF->addr_text = XtVaCreateManagedWidget("addr_text",
|
|
xmTextFieldWidgetClass, form,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 3,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
NULL);
|
|
|
|
XtManageChild(form);
|
|
|
|
form = XtVaCreateWidget("form3",
|
|
xmFormWidgetClass, rc2,
|
|
XmNfractionBase, 10,
|
|
NULL);
|
|
|
|
label = XtVaCreateManagedWidget("Proxy",
|
|
xmLabelWidgetClass, form,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 0,
|
|
XmNalignment, XmALIGNMENT_BEGINNING,
|
|
NULL);
|
|
|
|
port = XtVaCreateManagedWidget("Port",
|
|
xmLabelWidgetClass, form,
|
|
XmNtopAttachment, XmATTACH_WIDGET,
|
|
XmNtopWidget, label,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 0,
|
|
XmNalignment, XmALIGNMENT_BEGINNING,
|
|
NULL);
|
|
|
|
pEditInfo->IF->port_text = XtVaCreateManagedWidget("port_text",
|
|
xmTextFieldWidgetClass, form,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 3,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNmaxLength, 5,
|
|
XmNcolumns, 6,
|
|
NULL);
|
|
|
|
XtManageChild(form);
|
|
|
|
form = XtVaCreateWidget("form4",
|
|
xmFormWidgetClass, rc2,
|
|
XmNfractionBase, 10,
|
|
NULL);
|
|
|
|
label = XtVaCreateManagedWidget("Alive",
|
|
xmLabelWidgetClass, form,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 0,
|
|
XmNalignment, XmALIGNMENT_BEGINNING,
|
|
NULL);
|
|
|
|
pEditInfo->IF->alive = XtVaCreateManagedWidget("alive",
|
|
xmToggleButtonWidgetClass, form,
|
|
XmNlabelString, XmStringCreateSimple(""),
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 3,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
NULL);
|
|
|
|
XtManageChild(form);
|
|
|
|
#ifdef OTHER_TRANSPORT
|
|
trans_string = XmStringCreateSimple("Transport Method");
|
|
http_string = XmStringCreateSimple("http");
|
|
cci_string = XmStringCreateSimple("cci");
|
|
|
|
/*
|
|
** If we're editing, start option menu with the value specified
|
|
** otherwise, we're adding, so default to TRANS_HTTP.
|
|
*/
|
|
|
|
if (type == EDIT)
|
|
trans_val = pEditInfo->editing->trans_val;
|
|
else
|
|
trans_val = TRANS_HTTP;
|
|
|
|
pEditInfo->IF->trans_menu = XmVaCreateSimpleOptionMenu(rc2, "trans_menu",
|
|
trans_string, 'T', trans_val, NULL,
|
|
XmVaPUSHBUTTON, http_string, 'H', NULL, NULL,
|
|
XmVaPUSHBUTTON, cci_string, 'C', NULL, NULL,
|
|
NULL);
|
|
|
|
|
|
XmStringFree(trans_string);
|
|
XmStringFree(http_string);
|
|
XmStringFree(cci_string);
|
|
|
|
|
|
XtManageChild(pEditInfo->IF->trans_menu);
|
|
#endif
|
|
|
|
XtManageChild(rc2);
|
|
|
|
XtManageChild(text_form);
|
|
|
|
|
|
trans_rc = XtVaCreateWidget("trans_rc",
|
|
xmRowColumnWidgetClass, rc,
|
|
XmNorientation, XmVERTICAL,
|
|
NULL);
|
|
|
|
label = XtVaCreateManagedWidget("Scheme Info",
|
|
xmLabelWidgetClass, trans_rc,
|
|
NULL);
|
|
|
|
pEditInfo->translation = XmCreateScrolledList(trans_rc, "trans_info", NULL, 0);
|
|
|
|
XtVaSetValues(pEditInfo->translation,
|
|
XmNwidth, 150,
|
|
XmNvisibleItemCount, 3,
|
|
XmNmargin, 1,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNwidth, 150,
|
|
XmNvisibleItemCount, 5,
|
|
XmNmargin, 1,
|
|
NULL);
|
|
|
|
|
|
XtManageChild(pEditInfo->translation);
|
|
|
|
rc3 = XtVaCreateWidget("rowcolumn3",
|
|
xmRowColumnWidgetClass, trans_rc,
|
|
XmNtopAttachment, XmATTACH_WIDGET,
|
|
XmNtopWidget, pEditInfo->translation,
|
|
XmNorientation, XmHORIZONTAL,
|
|
NULL);
|
|
|
|
add = XtVaCreateManagedWidget("Add",
|
|
xmPushButtonWidgetClass, rc3,
|
|
NULL);
|
|
|
|
remove = XtVaCreateManagedWidget("Remove",
|
|
xmPushButtonWidgetClass, rc3,
|
|
NULL);
|
|
|
|
edit = XtVaCreateManagedWidget("Edit",
|
|
xmPushButtonWidgetClass, rc3,
|
|
NULL);
|
|
|
|
XtManageChild(rc3);
|
|
|
|
XtManageChild(trans_rc);
|
|
|
|
XtManageChild(rc);
|
|
XtManageChild(main_form);
|
|
|
|
XtAddCallback(edit, XmNactivateCallback, CallEditDomain, pEditInfo);
|
|
XtAddCallback(pEditInfo->translation, XmNdefaultActionCallback, CallEditDomain, pEditInfo);
|
|
|
|
XtAddCallback(add, XmNactivateCallback, CallAddDomain, pEditInfo);
|
|
XtAddCallback(remove, XmNactivateCallback, CallRemoveProxyDomain, pEditInfo);
|
|
|
|
XtAddCallback(commit, XmNactivateCallback, CommitProxyInfo, pEditInfo);
|
|
XtAddCallback(dismiss, XmNactivateCallback, DismissProxy, EditProxyDialog);
|
|
XtAddCallback(EditProxyDialog, XmNdestroyCallback, DestroyDialog, &fEditProxyDialog);
|
|
XtAddCallback(EditProxyDialog, XmNpopupCallback, CenterDialog, NULL);
|
|
|
|
XtAddCallback(help, XmNactivateCallback, HelpWindow, "help-proxy-edit.html");
|
|
|
|
if (type == EDIT)
|
|
FillProxyText(pEditInfo);
|
|
else
|
|
ClearProxyText(pEditInfo);
|
|
|
|
XtPopup(EditProxyDialog, XtGrabNone);
|
|
}
|
|
|
|
void
|
|
CallEditDomain(Widget w, XtPointer client, XtPointer call)
|
|
{
|
|
EditProxyDomainInfo(w, client, call, EDIT);
|
|
}
|
|
|
|
void
|
|
CallAddDomain(Widget w, XtPointer client, XtPointer call)
|
|
{
|
|
EditProxyDomainInfo(w, client, call, ADD);
|
|
}
|
|
|
|
void
|
|
EditProxyDomainInfo(w, client, call, type)
|
|
Widget w;
|
|
XtPointer client;
|
|
XtPointer call;
|
|
int type;
|
|
{
|
|
Widget main_form, action_area, sep, dismiss, commit, help;
|
|
Widget rc, form, domain;
|
|
|
|
XmString selected_string;
|
|
char *selected_text;
|
|
|
|
struct EditInfo *pEditInfo;
|
|
|
|
static int fEditProxyDomainDialog = 0;
|
|
|
|
/*
|
|
** We obtain information from the client pointer, rather than getting
|
|
** it from call->item because this routine can be called from
|
|
** a pushbutton as well as from double clicking the list.
|
|
*/
|
|
|
|
pEditInfo = (struct EditInfo *)client;
|
|
pEditInfo->domaintype = type;
|
|
|
|
if (type == EDIT) {
|
|
selected_string = GetStringFromScrolled((Widget)pEditInfo->translation);
|
|
|
|
if (selected_string == NULL) {
|
|
|
|
XmxMakeErrorDialog(mo_main_window->base, EDIT_ERROR, "No Entry Selected");
|
|
XtManageChild (Xmx_w);
|
|
return;
|
|
}
|
|
|
|
XmStringGetLtoR(selected_string, XmSTRING_DEFAULT_CHARSET,
|
|
&selected_text);
|
|
|
|
if (pdList)
|
|
pEditInfo->editingDomain = FindProxyDomainEntry(pdList, selected_text);
|
|
else
|
|
pEditInfo->editingDomain = FindProxyDomainEntry(pEditInfo->editing->list, selected_text);
|
|
|
|
XtFree(selected_text);
|
|
}
|
|
|
|
if (fEditProxyDomainDialog) {
|
|
if (type == EDIT)
|
|
XmTextSetString(pEditInfo->IF->domain_text, pEditInfo->editingDomain->domain);
|
|
else
|
|
XmTextSetString(pEditInfo->IF->domain_text, "");
|
|
|
|
XtPopup(EditProxyDomainDialog, XtGrabNone);
|
|
return;
|
|
}
|
|
|
|
EditProxyDomainDialog = XtVaCreatePopupShell("Proxy Domain",
|
|
xmDialogShellWidgetClass, XtParent(w),
|
|
XmNdeleteResponse, XmDESTROY,
|
|
XmNtitle, "Proxy Domain Information",
|
|
NULL);
|
|
|
|
fEditProxyDomainDialog = 1;
|
|
|
|
main_form = XtVaCreateWidget("edit_form",
|
|
xmFormWidgetClass, EditProxyDomainDialog,
|
|
NULL);
|
|
/*
|
|
** Create action area widgets
|
|
*/
|
|
action_area = XtVaCreateWidget("action",
|
|
xmFormWidgetClass, main_form,
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNfractionBase, 3,
|
|
NULL);
|
|
|
|
sep = XtVaCreateManagedWidget("separator",
|
|
xmSeparatorWidgetClass, action_area,
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
NULL);
|
|
|
|
dismiss = XtVaCreateManagedWidget("Abort",
|
|
xmPushButtonWidgetClass, action_area,
|
|
XmNtopAttachment, XmATTACH_WIDGET,
|
|
XmNtopWidget, sep,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 0,
|
|
XmNrightAttachment, XmATTACH_POSITION,
|
|
XmNrightPosition, 1,
|
|
XmNshowAsDefault, True,
|
|
XmNdefaultButtonShadowThickness, 1,
|
|
NULL);
|
|
|
|
commit = XtVaCreateManagedWidget("Commit",
|
|
xmPushButtonWidgetClass, action_area,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 1,
|
|
XmNrightAttachment, XmATTACH_POSITION,
|
|
XmNrightPosition, 2,
|
|
XmNshowAsDefault, True,
|
|
XmNdefaultButtonShadowThickness, 1,
|
|
NULL);
|
|
|
|
help = XtVaCreateManagedWidget("Help...",
|
|
xmPushButtonWidgetClass, action_area,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 2,
|
|
XmNrightAttachment, XmATTACH_POSITION,
|
|
XmNrightPosition, 3,
|
|
XmNshowAsDefault, True,
|
|
XmNdefaultButtonShadowThickness, 1,
|
|
NULL);
|
|
|
|
rc = XtVaCreateWidget("rowcolumn",
|
|
xmRowColumnWidgetClass, main_form,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_WIDGET,
|
|
XmNbottomWidget, action_area,
|
|
NULL);
|
|
|
|
form = XtVaCreateWidget("form1",
|
|
xmFormWidgetClass, rc,
|
|
XmNfractionBase, 10,
|
|
NULL);
|
|
|
|
domain = XtVaCreateManagedWidget("Scheme Info",
|
|
xmLabelWidgetClass, form,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 0,
|
|
XmNalignment, XmALIGNMENT_END,
|
|
NULL);
|
|
|
|
pEditInfo->IF->domain_text= XtVaCreateManagedWidget("domain_text",
|
|
xmTextFieldWidgetClass, form,
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 4,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
NULL);
|
|
|
|
if (type == EDIT)
|
|
XmTextSetString(pEditInfo->IF->domain_text, pEditInfo->editingDomain->domain);
|
|
else
|
|
XmTextSetString(pEditInfo->IF->domain_text, "");
|
|
|
|
XtManageChild(form);
|
|
XtManageChild(rc);
|
|
|
|
XtManageChild(action_area);
|
|
XtManageChild(main_form);
|
|
|
|
XtAddCallback(dismiss, XmNactivateCallback, DismissProxy, EditProxyDomainDialog);
|
|
XtAddCallback(commit, XmNactivateCallback, CommitProxyDomainInfo, pEditInfo);
|
|
XtAddCallback(EditProxyDomainDialog, XmNdestroyCallback, DestroyDialog, &fEditProxyDomainDialog);
|
|
XtAddCallback(EditProxyDomainDialog, XmNpopupCallback, CenterDialog, NULL);
|
|
|
|
XtAddCallback(help, XmNactivateCallback, HelpWindow, "help-proxy-domain-edit.html");
|
|
|
|
XtPopup(EditProxyDomainDialog, XtGrabNone);
|
|
}
|
|
|
|
void
|
|
ShowProxyList(struct EditInfo *pEditInfo)
|
|
{
|
|
Widget scrolled;
|
|
struct Proxy *proxy;
|
|
|
|
scrolled = pEditInfo->scrolled;
|
|
|
|
proxy = pEditInfo->proxy_list;
|
|
|
|
XmListDeleteAllItems(pEditInfo->scrolled);
|
|
|
|
while (proxy != NULL) {
|
|
AddProxyToList(pEditInfo, proxy);
|
|
proxy = proxy->next;
|
|
}
|
|
}
|
|
|
|
void
|
|
AddProxyToList(struct EditInfo *pEditInfo, struct Proxy *proxy)
|
|
{
|
|
char *p;
|
|
XmString string;
|
|
Widget scrolled = pEditInfo->scrolled;
|
|
|
|
if ((p = (char *)malloc(256*sizeof(char))) == NULL)
|
|
return;
|
|
|
|
if (pEditInfo->fProxy)
|
|
sprintf(p,"%-12.12s %s:%s",proxy->scheme, proxy->address, proxy->port);
|
|
else {
|
|
if (proxy->port)
|
|
sprintf(p,"%s:%s",proxy->address,proxy->port);
|
|
else
|
|
sprintf(p,"%s", proxy->address);
|
|
}
|
|
|
|
string = XmStringCreateSimple(p);
|
|
|
|
XmListAddItem(scrolled, string, 0);
|
|
free(p);
|
|
XmStringFree(string);
|
|
|
|
}
|
|
|
|
struct Proxy *
|
|
GetNoProxy(char *access, char *site)
|
|
{
|
|
struct Proxy *p = noproxy_list;
|
|
char *port = NULL;
|
|
int portnum = -1;
|
|
|
|
if ((access == NULL) || (site == NULL))
|
|
return NULL;
|
|
|
|
if ((port = strchr(site,':')) != NULL) {
|
|
*port++ = 0;
|
|
portnum = atoi(port);
|
|
} else {
|
|
if (!strcmp(access,"http")) portnum = 80;
|
|
else if (!strcmp(access,"gopher")) portnum = 70;
|
|
else if (!strcmp(access,"ftp")) portnum = 21;
|
|
else if (!strcmp(access,"wais")) portnum = 210;
|
|
}
|
|
|
|
while (p != NULL) {
|
|
if (strstr(site,p->address)) {
|
|
if (p->port == NULL) {
|
|
break;
|
|
} else {
|
|
int match_port = atoi(p->port);
|
|
if (match_port == portnum)
|
|
break;
|
|
}
|
|
}
|
|
p = p->next;
|
|
}
|
|
return p;
|
|
}
|
|
|
|
|
|
void ClearTempBongedProxies() {
|
|
|
|
struct Proxy *p = proxy_list;
|
|
|
|
while (p!=NULL) {
|
|
if (p->alive==2) {
|
|
p->alive=0;
|
|
}
|
|
p=p->next;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
struct Proxy *
|
|
GetProxy(char *proxy, char *access, int fMatchEnd)
|
|
{
|
|
struct Proxy *p = proxy_list;
|
|
struct ProxyDomain *pd;
|
|
|
|
if ((access == NULL) || (proxy == NULL))
|
|
return NULL;
|
|
|
|
while (p != NULL) {
|
|
|
|
if (strcmp(p->scheme, proxy) != 0 || p->alive) {
|
|
p = p->next;
|
|
continue;
|
|
}
|
|
|
|
/* found a matching proxy */
|
|
|
|
/*
|
|
** If the access list is empty, that's a match on
|
|
** everything. Bale out here.
|
|
*/
|
|
if (p->list == NULL)
|
|
return p;
|
|
|
|
pd = p->list;
|
|
|
|
while (pd != NULL) {
|
|
char *ptr;
|
|
|
|
ptr = strstr(access, pd->domain);
|
|
|
|
if (ptr) {
|
|
if (fMatchEnd) {
|
|
/* at the end? */
|
|
if (strlen(ptr) == strlen(pd->domain))
|
|
break;
|
|
} else {
|
|
/* at beginning? */
|
|
if (ptr == access)
|
|
break;
|
|
}
|
|
}
|
|
pd = pd->next;
|
|
}
|
|
|
|
if (pd == NULL) {
|
|
p = p->next;
|
|
continue; /* We didn't match... look for another */
|
|
}
|
|
|
|
return p; /* we found a match on access and proxy */
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
struct Proxy *
|
|
FindProxyEntry(struct EditInfo *pEditInfo, char *txt)
|
|
{
|
|
struct Proxy *p;
|
|
int i, fProxy;
|
|
char proxy[30], address[50], port[8], *ptr;
|
|
|
|
fProxy = pEditInfo->fProxy;
|
|
|
|
if (fProxy) {
|
|
sscanf(txt,"%s %s",proxy,address);
|
|
ptr = strchr(address,':');
|
|
if (ptr) { /* which should always be true.... */
|
|
*ptr++ = '\0';
|
|
strcpy(port,ptr);
|
|
}
|
|
}
|
|
else {
|
|
if ((ptr = strchr(txt,':')) != NULL) {
|
|
*ptr = ' ';
|
|
sscanf(txt,"%s %s", address, port);
|
|
} else {
|
|
sscanf(txt,"%s",address);
|
|
port[0] = '\0';
|
|
}
|
|
}
|
|
|
|
p = pEditInfo->proxy_list;
|
|
|
|
while (p != NULL) {
|
|
if (strcmp(p->address, address) == 0) {
|
|
if (fProxy == FALSE) {
|
|
if ((port[0] == '\0') && (p->port == NULL))
|
|
break;
|
|
if (strcmp(p->port, port) == 0)
|
|
break;
|
|
} else if (strcmp(p->scheme, proxy) == 0) {
|
|
if (strcmp(p->port, port) == 0)
|
|
break;
|
|
}
|
|
}
|
|
p = p->next;
|
|
}
|
|
|
|
if (p == NULL)
|
|
return NULL; /* whoops */
|
|
return p;
|
|
}
|
|
|
|
struct ProxyDomain *
|
|
FindProxyDomainEntry(struct ProxyDomain *pDomain, char *txt)
|
|
{
|
|
struct ProxyDomain *p;
|
|
|
|
p = pDomain;
|
|
while (p != NULL) {
|
|
if (strcmp(p->domain,txt))
|
|
return p;
|
|
p = p->next;
|
|
}
|
|
}
|
|
|
|
void
|
|
FillProxyText(struct EditInfo *p)
|
|
{
|
|
XmString string;
|
|
|
|
ClearProxyText(p);
|
|
if (p->IF->proxy_text)
|
|
XmTextSetString(p->IF->proxy_text, p->editing->scheme);
|
|
XmTextSetString(p->IF->addr_text, p->editing->address);
|
|
|
|
if (p->editing->port)
|
|
XmTextSetString(p->IF->port_text, p->editing->port);
|
|
|
|
if (p->IF->alive!=NULL) {
|
|
if (p->editing->alive)
|
|
XmToggleButtonSetState(p->IF->alive, False, False);
|
|
else
|
|
XmToggleButtonSetState(p->IF->alive, True, False);
|
|
}
|
|
|
|
if (p->editing->list == NULL)
|
|
return;
|
|
|
|
ShowProxyDomainList(p);
|
|
}
|
|
|
|
void
|
|
ShowProxyDomainList(struct EditInfo *pEditInfo)
|
|
{
|
|
|
|
XmString string;
|
|
|
|
struct ProxyDomain *p;
|
|
|
|
XmListDeleteAllItems(pEditInfo->translation);
|
|
|
|
/*
|
|
** Fill in the translation domain list
|
|
*/
|
|
|
|
p = NULL;
|
|
if (pdList != NULL)
|
|
p = pdList;
|
|
else if (pEditInfo->editing != NULL)
|
|
p = pEditInfo->editing->list;
|
|
while (p != NULL) {
|
|
if (p->domain) {
|
|
string = XmStringCreateSimple(p->domain);
|
|
|
|
XmListAddItem(pEditInfo->translation, string, 0);
|
|
XmStringFree(string);
|
|
}
|
|
p = p->next;
|
|
}
|
|
|
|
}
|
|
|
|
void
|
|
ClearProxyText(struct EditInfo *p)
|
|
{
|
|
|
|
if (p->IF->proxy_text)
|
|
XmTextSetString(p->IF->proxy_text, "");
|
|
if (p->IF->addr_text)
|
|
XmTextSetString(p->IF->addr_text, "");
|
|
if (p->IF->port_text)
|
|
XmTextSetString(p->IF->port_text, "");
|
|
if (p->IF->alive!=NULL)
|
|
XmToggleButtonSetState(p->IF->alive, True, False);
|
|
if (p->translation)
|
|
XmListDeleteAllItems(p->translation);
|
|
}
|
|
|
|
void
|
|
CommitProxyInfo(w, client, call)
|
|
Widget w;
|
|
XtPointer client;
|
|
XtPointer call;
|
|
{
|
|
Widget label;
|
|
XmString label_string;
|
|
|
|
struct EditInfo *pEditInfo;
|
|
struct Proxy *p;
|
|
|
|
char *proxy, *addr, *port, *trans;
|
|
|
|
pEditInfo = (struct EditInfo *)client;
|
|
|
|
if (pEditInfo->IF->proxy_text) {
|
|
proxy = XmTextGetString(pEditInfo->IF->proxy_text);
|
|
if (proxy[0] == '\0') {
|
|
|
|
XmxMakeErrorDialog(mo_main_window->base, COMMIT_PROXY_EMPTY_ERROR, "No Proxy Entered");
|
|
XtManageChild (Xmx_w);
|
|
return;
|
|
}
|
|
}
|
|
|
|
addr = XmTextGetString(pEditInfo->IF->addr_text);
|
|
if (addr[0] == '\0') {
|
|
|
|
XmxMakeErrorDialog(mo_main_window->base, COMMIT_ADDR_EMPTY_ERROR, "No Address Entered");
|
|
XtManageChild (Xmx_w);
|
|
return;
|
|
}
|
|
|
|
/* Make sure it is all lowercase */
|
|
{char *ptr; for (ptr=addr; ptr && *ptr; ptr++) *ptr=tolower(*ptr);}
|
|
|
|
port = XmTextGetString(pEditInfo->IF->port_text);
|
|
if (port[0] == '\0') {
|
|
if (pEditInfo->fProxy) {
|
|
XmxMakeErrorDialog(mo_main_window->base, COMMIT_PORT_EMPTY_ERROR, "No Port Entered");
|
|
XtManageChild (Xmx_w);
|
|
return;
|
|
}
|
|
XtFree(port);
|
|
port = NULL;
|
|
}
|
|
|
|
if (pEditInfo->type == EDIT) {
|
|
p = pEditInfo->editing;
|
|
} else {
|
|
p = (struct Proxy *)calloc(1, sizeof(struct Proxy));
|
|
pEditInfo->editing = p;
|
|
}
|
|
|
|
if (pEditInfo->fProxy) {
|
|
if (p->scheme)
|
|
p->scheme = (char *)realloc(p->scheme,strlen(proxy)+1);
|
|
else
|
|
p->scheme = (char *)calloc(1, strlen(proxy)+1);
|
|
|
|
strcpy(p->scheme,proxy);
|
|
XtFree(proxy);
|
|
} else p->scheme = NULL;
|
|
|
|
if (p->address)
|
|
p->address = (char *)realloc(p->address,strlen(addr)+1);
|
|
else
|
|
p->address = (char *)calloc(1, strlen(addr)+1);
|
|
|
|
strcpy(p->address, addr);
|
|
XtFree(addr);
|
|
|
|
if (port != NULL) {
|
|
if (p->port)
|
|
p->port = (char *)realloc(p->port, strlen(port)+1);
|
|
else
|
|
p->port = (char *)calloc(1, strlen(port)+1);
|
|
strcpy(p->port, port);
|
|
if (port)
|
|
XtFree(port);
|
|
} else {
|
|
if (p->port)
|
|
free(p->port);
|
|
p->port = NULL;
|
|
}
|
|
|
|
if (pEditInfo->IF->alive!=NULL) {
|
|
p->alive = (XmToggleButtonGetState(pEditInfo->IF->alive) == True) ? 0 : 1;
|
|
}
|
|
|
|
#ifdef OTHER_TRANSPORT
|
|
label = XmOptionButtonGadget(pEditInfo->IF->trans_menu);
|
|
XtVaGetValues(label,
|
|
XmNlabelString, &label_string,
|
|
NULL);
|
|
|
|
XmStringGetLtoR(label_string, XmSTRING_DEFAULT_CHARSET, &trans);
|
|
if (p->transport)
|
|
p->transport = (char *)realloc(p->transport, strlen(trans)+1);
|
|
else
|
|
p->transport = (char *)calloc(1, strlen(trans)+1);
|
|
strcpy(p->transport, trans);
|
|
XtFree(trans);
|
|
#else
|
|
if ((p->transport == NULL) && (pEditInfo->fProxy)){
|
|
p->transport = (char *)calloc(1, 5); /* strlen("http")+1 */
|
|
strcpy(p->transport, "http");
|
|
}
|
|
#endif
|
|
|
|
if (pEditInfo->type == ADD) {
|
|
AddProxyToList(pEditInfo, p);
|
|
AppendProxy(pEditInfo, p);
|
|
}
|
|
if (pdList != NULL) {
|
|
pEditInfo->editing->list = pdList;
|
|
pdList = NULL;
|
|
}
|
|
ShowProxyList(pEditInfo);
|
|
|
|
if (pEditInfo->fProxy)
|
|
XtPopdown(EditProxyDialog);
|
|
else
|
|
XtPopdown(EditNoProxyDialog);
|
|
}
|
|
|
|
void
|
|
CommitProxyDomainInfo(Widget w, XtPointer client, XtPointer call)
|
|
{
|
|
char *domain;
|
|
struct EditInfo *p = (struct EditInfo *)client;
|
|
|
|
domain = XmTextGetString(p->IF->domain_text);
|
|
if (domain[0] == '\0') {
|
|
|
|
XmxMakeErrorDialog(mo_main_window->base, COMMIT_DOMAIN_EMPTY_ERROR, "No Entry Selected");
|
|
|
|
XtManageChild (Xmx_w);
|
|
return;
|
|
}
|
|
|
|
/* Make sure it is all lowercase */
|
|
{char *ptr; for (ptr=domain; ptr && *ptr; ptr++) *ptr=tolower(*ptr);}
|
|
|
|
if (p->domaintype == ADD) {
|
|
struct ProxyDomain *pd;
|
|
|
|
if (pdList == NULL) {
|
|
/*
|
|
** Temporary list is null
|
|
*/
|
|
if (p->editing == NULL) /* scheme being used yet? */
|
|
pd = NULL; /* no */
|
|
else
|
|
pd = p->editing->list; /* yes! use it */
|
|
} else
|
|
pd = pdList;
|
|
if (pd == NULL) { /* this will be the first thing in list */
|
|
AddProxyDomain(domain, &pd);
|
|
if (p->editing)
|
|
p->editing->list = pd;
|
|
else
|
|
pdList = pd;
|
|
} else {
|
|
while (pd->next != NULL)
|
|
pd = pd->next;
|
|
AddProxyDomain(domain, &pd);
|
|
}
|
|
} else {
|
|
p->editingDomain->domain =
|
|
(char *)realloc(p->editingDomain->domain,strlen(domain)+1);
|
|
strcpy(p->editingDomain->domain, domain);
|
|
}
|
|
|
|
ShowProxyDomainList(p);
|
|
XtPopdown(EditProxyDomainDialog);
|
|
return;
|
|
}
|
|
|
|
void
|
|
DismissProxy(w, client, call)
|
|
Widget w;
|
|
XtPointer client;
|
|
XtPointer call;
|
|
{
|
|
Widget dialog = (Widget)client;
|
|
|
|
XtPopdown(dialog);
|
|
}
|
|
|
|
#ifdef OTHER_TRANSPORT
|
|
void
|
|
SetOptionMenuButtonLabel(w, s)
|
|
Widget w;
|
|
char *s;
|
|
{
|
|
Widget label;
|
|
XmString label_string;
|
|
|
|
|
|
label = XmOptionButtonGadget(w);
|
|
|
|
label_string = XmStringCreateSimple(s);
|
|
|
|
XtVaSetValues(label,
|
|
XmNlabelString, label_string,
|
|
NULL);
|
|
|
|
XmStringFree(label_string);
|
|
|
|
}
|
|
#endif
|
|
|
|
void
|
|
RemoveProxyInfo(Widget w, XtPointer client, XtPointer call, int type)
|
|
{
|
|
XmString selected_string;
|
|
char *selected_text;
|
|
struct EditInfo *pEditInfo = (struct EditInfo *)client;
|
|
|
|
if (type == PROXY)
|
|
selected_string = GetStringFromScrolled(pEditInfo->scrolled);
|
|
else
|
|
selected_string = GetStringFromScrolled(pEditInfo->translation);
|
|
|
|
if (selected_string == NULL) {
|
|
XmxMakeErrorDialog(mo_main_window->base, REMOVE_ERROR, "No Entry Selected");
|
|
XtManageChild (Xmx_w);
|
|
return;
|
|
}
|
|
|
|
XmStringGetLtoR(selected_string, XmSTRING_DEFAULT_CHARSET, &selected_text);
|
|
if (type == PROXY) {
|
|
struct Proxy *pEditing = FindProxyEntry(pEditInfo, selected_text);
|
|
|
|
|
|
DeleteProxy(pEditInfo, pEditing);
|
|
ShowProxyList(pEditInfo);
|
|
} else { /* PROXY_DOMAIN */
|
|
struct ProxyDomain *pdEntry;
|
|
|
|
if (pdList != NULL)
|
|
pdEntry = FindProxyDomainEntry(pdList, selected_text);
|
|
else
|
|
pdEntry = FindProxyDomainEntry(pEditInfo->editing->list, selected_text);
|
|
|
|
if (pdList != NULL) {
|
|
if (pdEntry == pdList)
|
|
pdList = pdEntry->next;
|
|
} else {
|
|
if (pdEntry == pEditInfo->editing->list)
|
|
pEditInfo->editing->list = pdEntry->next;
|
|
}
|
|
DeleteProxyDomain(pdEntry);
|
|
ShowProxyDomainList(pEditInfo);
|
|
}
|
|
|
|
XtFree(selected_text);
|
|
}
|
|
|
|
|
|
void
|
|
WriteProxies(Widget w, XtPointer client, XtPointer call)
|
|
{
|
|
struct Proxy *p;
|
|
struct ProxyDomain *pd;
|
|
struct EditInfo *pEditInfo;
|
|
FILE *fp;
|
|
int flag;
|
|
char msgbuf[256];
|
|
extern XtAppContext app_context;
|
|
|
|
pEditInfo = (struct EditInfo *)client;
|
|
|
|
p = pEditInfo->proxy_list;
|
|
|
|
if (pEditInfo->fProxy) {
|
|
if ((fp = fopen(get_pref_string(ePROXY_SPECFILE),"w")) == NULL) {
|
|
sprintf(msgbuf,SAVE_ERROR, get_pref_string(ePROXY_SPECFILE));
|
|
XmxMakeErrorDialog(mo_main_window->base, msgbuf, "Error writing file");
|
|
XtManageChild (Xmx_w);
|
|
return;
|
|
}
|
|
} else {
|
|
if ((fp = fopen(get_pref_string(eNOPROXY_SPECFILE),"w")) == NULL) {
|
|
sprintf(msgbuf,SAVE_ERROR, get_pref_string(eNOPROXY_SPECFILE));
|
|
XmxMakeErrorDialog(mo_main_window->base, msgbuf, "Error writing file");
|
|
XtManageChild (Xmx_w);
|
|
return;
|
|
}
|
|
}
|
|
|
|
while (p != NULL) {
|
|
if (p->scheme)
|
|
fprintf(fp,"%s ",p->scheme);
|
|
if (p->address)
|
|
fprintf(fp,"%s ",p->address);
|
|
if (p->port)
|
|
fprintf(fp,"%s ",p->port);
|
|
if (p->transport)
|
|
fprintf(fp,"%s ",p->transport);
|
|
|
|
pd = p->list;
|
|
|
|
if (pd != NULL) {
|
|
flag = 0;
|
|
while (pd != NULL) {
|
|
if (flag)
|
|
fprintf(fp,"\\\n");
|
|
else
|
|
flag = 1;
|
|
fprintf(fp, "%s ",pd->domain);
|
|
pd = pd->next;
|
|
}
|
|
}
|
|
fprintf(fp,"\n");
|
|
p = p->next;
|
|
}
|
|
|
|
if (pEditInfo->fProxy)
|
|
sprintf(msgbuf,SAVED_AOK,get_pref_string(ePROXY_SPECFILE));
|
|
else
|
|
sprintf(msgbuf,SAVED_AOK,get_pref_string(eNOPROXY_SPECFILE));
|
|
|
|
XmxMakeInfoDialog(mo_main_window->base, msgbuf, "File Saved");
|
|
XtManageChild (Xmx_w);
|
|
fclose(fp);
|
|
}
|
|
|
|
void
|
|
DestroyDialog(Widget w, XtPointer client, XtPointer call)
|
|
{
|
|
int *flag = (int *)client;
|
|
|
|
*flag = 0;
|
|
}
|
|
|
|
AppendProxy(struct EditInfo *pEditInfo, struct Proxy *p)
|
|
{
|
|
struct Proxy *cur;
|
|
|
|
cur = pEditInfo->proxy_list;
|
|
|
|
p->next = NULL;
|
|
p->prev = NULL;
|
|
|
|
if (cur != NULL) {
|
|
while (cur->next != NULL)
|
|
cur = cur->next;
|
|
|
|
p->prev = cur;
|
|
cur->next = p;
|
|
} else {
|
|
pEditInfo->proxy_list = p;
|
|
if (pEditInfo->fProxy)
|
|
proxy_list = p;
|
|
else
|
|
noproxy_list = p;
|
|
}
|
|
}
|
|
|
|
void
|
|
DeleteProxy(struct EditInfo *pEditInfo, struct Proxy *p)
|
|
{
|
|
struct Proxy *cur;
|
|
extern struct Proxy *proxy_list, *noproxy_list;
|
|
struct Proxy *pl;
|
|
|
|
cur = p;
|
|
|
|
|
|
if (pEditInfo->fProxy)
|
|
pl = proxy_list;
|
|
else
|
|
pl = noproxy_list;
|
|
/*
|
|
** Delete proxy from list
|
|
*/
|
|
if (cur == pl) {
|
|
pl = cur->next;
|
|
if (pl == NULL) {
|
|
pEditInfo->proxy_list = NULL;
|
|
if (pEditInfo->fProxy)
|
|
proxy_list = NULL;
|
|
|
|
else
|
|
noproxy_list = NULL;
|
|
} else {
|
|
pEditInfo->proxy_list = pl;
|
|
if (pEditInfo->fProxy)
|
|
proxy_list = pl;
|
|
else
|
|
noproxy_list = pl;
|
|
}
|
|
}
|
|
|
|
if (cur->next != NULL)
|
|
cur->next->prev = p->prev;
|
|
|
|
if (cur->prev != NULL)
|
|
cur->prev->next = p->next;
|
|
|
|
/*
|
|
** Delete allocated space from proxy entry
|
|
*/
|
|
if (p->scheme) {
|
|
free(p->scheme);
|
|
p->scheme = NULL;
|
|
}
|
|
|
|
if (p->address) {
|
|
free(p->address);
|
|
p->address = NULL;
|
|
}
|
|
|
|
if (p->port) {
|
|
free(p->port);
|
|
p->port = NULL;
|
|
}
|
|
if (p->transport) {
|
|
free(p->transport);
|
|
p->transport = NULL;
|
|
}
|
|
|
|
free(p);
|
|
}
|
|
|