Annotation of libwww/Library/src/HTAlert.html, revision 2.50

2.6       timbl       1: <HTML>
                      2: <HEAD>
2.46      frystyk     3:   <TITLE>W3C Sample Code Library libwww Library Alert Class</TITLE>
2.39      frystyk     4: <!-- Changed by: Henrik Frystyk Nielsen, 13-Jul-1996 -->
2.6       timbl       5: </HEAD>
                      6: <BODY>
2.38      frystyk     7: <H1>
                      8:   The Alert Class
                      9: </H1>
2.12      frystyk    10: <PRE>
                     11: /*
2.18      frystyk    12: **     (c) COPYRIGHT MIT 1995.
2.12      frystyk    13: **     Please first read the full copyright statement in the file COPYRIGH.
                     14: */
                     15: </PRE>
2.38      frystyk    16: <P>
                     17: The Alert class defines a set of methods to be used by libwww to be used
                     18: for passing prompts and message to a user. In order to maintain the Library
                     19: core application independent and natural language independent, libwww does
                     20: not know how to communicate with a <I>user</I>. Note here that a <I>user</I>
                     21: is a somewhat abstract notion for &nbsp;something that can receive a message
                     22: or prompt from the Library. This can for example be a person, but is may
                     23: also be handled automatically by a robot or a client receiving a response
                     24: from a HTTP server.
                     25: <P>
                     26: Libwww has a set of <B>opcodes</B> that classifies the nature of the message,
                     27: for example that it is a question that must be confirmed in order to continue
                     28: a request or simply a progress notification. The application can register
                     29: a method for any number of the defined opcodes - in case the Library has
                     30: a message for an opcode that does not have a method associated, the message
                     31: is ignored. You can also globally disable any message send from the Library.
                     32: <P>
                     33: <B>Note</B>: The library <B>core</B> does not define any message or dialog
                     34: methods - they are all considered part of the application. The library comes
                     35: with a <A HREF="HTDialog.html">default set of methods</A> which can be initiated
                     36: using the function <CODE>HTAlertInit()</CODE> in <A HREF="HTInit.html">HTInit
                     37: module</A>
                     38: <P>
                     39: This module is implemented by <A HREF="HTAlert.c">HTAlert.c</A>, and it is
2.50    ! frystyk    40: a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code
2.38      frystyk    41: Library</A>.
2.11      frystyk    42: <PRE>
2.12      frystyk    43: #ifndef HTALERT_H
                     44: #define HTALERT_H
2.17      frystyk    45: 
2.27      frystyk    46: #include "HTReq.h"
2.11      frystyk    47: </PRE>
2.38      frystyk    48: <H2>
                     49:   Message Opcodes and Messages
                     50: </H2>
                     51: <P>
                     52: The callback functions are defined as a generic callback where the caller
                     53: can pass a set of input parameters and the callee can return a set of outptu
                     54: parameters. Also note that all the <CODE>*_PROG_*</CODE> opcodes are a subset
                     55: of <CODE>HT_A_PROGRESS</CODE>. This means that you easily can register a
                     56: callback for <EM>all</EM> progress reports.
2.32      frystyk    57: <PRE>
                     58: typedef enum _HTAlertOpcode {
                     59:     HT_PROG_DNS                = 0x1,          /* Doing DNS resolution */
                     60:     HT_PROG_CONNECT    = 0x2,          /* Connecting Active */
                     61:     HT_PROG_ACCEPT     = 0x4,          /* Connecting Passive */
                     62:     HT_PROG_READ       = 0x8,          /* Read data */
                     63:     HT_PROG_WRITE      = 0x10,         /* Write data */
                     64:     HT_PROG_DONE       = 0x20,         /* Request finished */
                     65:     HT_PROG_WAIT       = 0x40,         /* Wait for socket */
2.44      frystyk    66:     HT_PROG_GC          = 0x80,         /* Cache garbage collecting */
2.32      frystyk    67:     HT_A_PROGRESS      = 0xFF,         /* Send a progress report - no reply */
                     68: 
                     69:     /* First word are reserved for progresss notifications */
                     70: 
                     71:     HT_A_MESSAGE       = 0x1&lt;&lt;8, /* Send a message - no reply */
                     72:     HT_A_CONFIRM       = 0x2&lt;&lt;8, /* Want YES or NO back */
                     73:     HT_A_PROMPT                = 0x4&lt;&lt;8, /* Want full dialog */
                     74:     HT_A_SECRET                = 0x8&lt;&lt;8, /* Secret dialog (e.g. password) */
                     75:     HT_A_USER_PW       = 0x10&lt;&lt;8 /* Atomic userid and password */
                     76: } HTAlertOpcode;
2.15      frystyk    77: 
2.32      frystyk    78: typedef struct _HTAlertPar HTAlertPar;
2.8       luotonen   79: 
2.32      frystyk    80: typedef BOOL HTAlertCallback   (HTRequest * request, HTAlertOpcode op,
2.35      frystyk    81:                                int msgnum, const char * dfault, void * input,
2.32      frystyk    82:                                HTAlertPar * reply);
2.6       timbl      83: </PRE>
2.38      frystyk    84: <P>
                     85: If you don't expect any return values then <CODE>reply</CODE> can be NULL.
                     86: The return value of the callback function can be used to indicate confirmation
                     87: on a prompt (Yes or No).
                     88: <H3>
                     89:   String Messages
                     90: </H3>
                     91: <P>
                     92: This is an enumerated list of messages that can be converted into a string
                     93: table etc.
2.15      frystyk    94: <PRE>
2.32      frystyk    95: typedef enum _HTAlertMsg {
                     96:     HT_MSG_NULL = -1,
                     97:     HT_MSG_UID = 0,
2.43      frystyk    98:     HT_MSG_PROXY_UID,
                     99:     HT_MSG_FTP_UID,
2.32      frystyk   100:     HT_MSG_PW,
                    101:     HT_MSG_FILENAME,
                    102:     HT_MSG_ACCOUNT,
                    103:     HT_MSG_METHOD,
                    104:     HT_MSG_MOVED,
                    105:     HT_MSG_RULES,
2.39      frystyk   106:     HT_MSG_FILE_REPLACE,
                    107:     HT_MSG_RETRY_AUTHENTICATION,
2.41      frystyk   108:     HT_MSG_RETRY_PROXY_AUTH,
2.40      frystyk   109:     HT_MSG_REDO,
                    110:     HT_MSG_BIG_PUT,
                    111:     HT_MSG_SOURCE_MOVED,
                    112:     HT_MSG_DESTINATION_MOVED,
2.41      frystyk   113:     HT_MSG_REDIRECTION,
2.47      frystyk   114:     HT_MSG_PROXY,
2.48      frystyk   115:     HT_MSG_CACHE_LOCK,
2.32      frystyk   116:     HT_MSG_ELEMENTS                        /* This MUST be the last element */
                    117: } HTAlertMsg;
2.45      eric      118: 
                    119: #define HT_MSG_ENGLISH_INITIALIZER \
                    120:     "Please enter username:", \
                    121:     "Please enter username for proxy authentication:", \
                    122:     "Please enter username for this FTP server:", \
                    123:     "Password:", \
                    124:     "Please give name of file to save in:", \
                    125:     "Plase enter account:", \
                    126:     "You might not be allowed to use this method here, continue?", \
                    127:     "Location has moved, continue?", \
2.47      frystyk   128:     "A new set of rules is requested to be added to your setup - continue?", \
2.45      eric      129:     "This file already exists - replace existing file?", \
                    130:     "Authentication failed - retry?", \
                    131:     "Proxy authentication failed - retry?", \
                    132:     "This method has already been performed - repeat operation?", \
                    133:     "This document is very big - continue operation?", \
                    134:     "The source document for this operation has moved - continue operation \
                    135: with new location?", \
                    136:     "The destination document for this operation has moved - continue \
                    137: operation with new location?", \
2.47      frystyk   138:     "A redirection may change the behavior of this method - proceed anyway?", \
2.48      frystyk   139:     "An automatic request for changing proxy has been encountered - continue?", \
                    140:     "The persistent cache is already in use by another user. If this is not \
                    141: the case then you can manually delete this lock and restart."
2.15      frystyk   142: </PRE>
2.38      frystyk   143: <H2>
                    144:   Enable or Disable Messages
                    145: </H2>
                    146: <P>
                    147: If you really don't want the library to prompt for anything at all then enable
                    148: this constant. The default value is <EM>Interactive</EM>.
2.32      frystyk   149: <PRE>
                    150: extern void HTAlert_setInteractive     (BOOL interative);
                    151: extern BOOL HTAlert_interactive                (void);
2.15      frystyk   152: </PRE>
2.38      frystyk   153: <H2>
                    154:   Creation and Deletion Methods
                    155: </H2>
                    156: <P>
                    157: Message methods are registered in lists. By default a list is not enabled
                    158: before you assign it as being <I><A HREF="#active">active</A></I>. This allows
                    159: the application to maintain multiple lists of message handlers which can
                    160: be swapped in and out as neeeded.
                    161: <H3>
                    162:   Add a Callback Function
                    163: </H3>
                    164: <P>
                    165: Register a call back function that is to be called when generating messages,
                    166: dialog, prompts, progress reports etc. The opcode signifies which call back
                    167: function to call depending of the type of the message. Opcode can be any
                    168: combination of the bitflags defined by <CODE>HTAlertOpcode</CODE>. If you
                    169: register one callback for <CODE>HT_A_PROGRESS </CODE>then this will get called
                    170: on all progress notifications.
2.15      frystyk   171: <PRE>
2.32      frystyk   172: extern BOOL HTAlertCall_add (HTList * list, HTAlertCallback * cbf,
                    173:                             HTAlertOpcode opcode);
2.15      frystyk   174: </PRE>
2.38      frystyk   175: <H3>
                    176:   Delete a Callback function
                    177: </H3>
                    178: <P>
2.32      frystyk   179: Unregister a call back function from a list
2.8       luotonen  180: <PRE>
2.32      frystyk   181: extern BOOL HTAlertCall_delete (HTList * list, HTAlertCallback * cbf);
2.15      frystyk   182: </PRE>
2.38      frystyk   183: <H3>
                    184:   Delete a list of Callback Functions
                    185: </H3>
                    186: <P>
2.32      frystyk   187: Unregisters all call back functions
                    188: <PRE>
                    189: extern BOOL HTAlertCall_deleteAll (HTList * list);
                    190: </PRE>
2.38      frystyk   191: <H3>
                    192:   Find a Callback Function
                    193: </H3>
                    194: <P>
                    195: Finds a callback function corresponding to the opcode. If none has been
                    196: registered then NULL is returned.
2.6       timbl     197: <PRE>
2.32      frystyk   198: extern HTAlertCallback * HTAlertCall_find(HTList * list, HTAlertOpcode opcode);
2.6       timbl     199: </PRE>
2.38      frystyk   200: <H2>
                    201:   The Reply Object
                    202: </H2>
                    203: <P>
                    204: The reply object is used for communicating input from the <I>user</I> back
                    205: to the Library. This is only required to use when for example the user is
                    206: prompted for a file name etc. You can find several examples on how to use
                    207: this in the <A HREF="HTDialog.html">default message and dialog module</A>
                    208: provided together with the Library.
                    209: <PRE>extern HTAlertPar * HTAlert_newReply      (void);
2.32      frystyk   210: extern void HTAlert_deleteReply                (HTAlertPar * old);
                    211: </PRE>
2.38      frystyk   212: <H3>
                    213:   Handle the Reply Message
                    214: </H3>
                    215: <P>
                    216: These methods provide the API for handling the reply message. There are two
                    217: ways of assigning a message to the reply message - either by copying the
                    218: buffer or by reusing the same buffer. In the latter case, the caller must
                    219: make sure <B>not</B> to free the reply message before it has been used.
2.34      frystyk   220: <PRE>
2.35      frystyk   221: extern BOOL HTAlert_setReplyMessage    (HTAlertPar * me, const char *message);
2.34      frystyk   222: extern BOOL HTAlert_assignReplyMessage (HTAlertPar * me, char * message);
                    223: </PRE>
2.38      frystyk   224: <P>
2.34      frystyk   225: You can get the data back again by using this method:
2.32      frystyk   226: <PRE>
                    227: extern char * HTAlert_replyMessage     (HTAlertPar * me);
2.34      frystyk   228: </PRE>
                    229: <PRE>
2.32      frystyk   230: extern char * HTAlert_replySecret      (HTAlertPar * me);
2.35      frystyk   231: extern BOOL HTAlert_setReplySecret     (HTAlertPar * me, const char * secret);
2.6       timbl     232: 
2.32      frystyk   233: extern void * HTAlert_replyOutput      (HTAlertPar * me);
                    234: extern BOOL HTAlert_setReplyOutput     (HTAlertPar * me, void * output);
2.17      frystyk   235: </PRE>
2.38      frystyk   236: <H2>
                    237:   <A NAME="active">Active set of Callback Functions</A>
                    238: </H2>
                    239: <P>
                    240: A list can be assigned as being active in which case it is <I>visible</I>
                    241: for libwww. The Library does not know about inactive lists of methods.
2.32      frystyk   242: <PRE>
                    243: extern void HTAlert_setGlobal  (HTList * list);
                    244: extern HTList * HTAlert_global (void);
                    245: </PRE>
2.38      frystyk   246: <P>
                    247: You can also assign a callback directly to the global list. In this case
                    248: you do not need to worry about creating the list - it will be created
                    249: automatically.
2.17      frystyk   250: <PRE>
2.49      frystyk   251: extern BOOL HTAlert_add              (HTAlertCallback * cbf, HTAlertOpcode opcode);
                    252: extern BOOL HTAlert_delete    (HTAlertCallback * cbf);
                    253: extern BOOL HTAlert_deleteAll (void);
2.32      frystyk   254: extern HTAlertCallback * HTAlert_find (HTAlertOpcode opcode);
                    255: </PRE>
                    256: <PRE>
2.12      frystyk   257: #endif
                    258: </PRE>
2.38      frystyk   259: <P>
                    260:   <HR>
2.37      frystyk   261: <ADDRESS>
2.50    ! frystyk   262:   @(#) $Id: HTAlert.html,v 2.49 1998/05/04 19:36:11 frystyk Exp $
2.37      frystyk   263: </ADDRESS>
2.38      frystyk   264: </BODY></HTML>

Webmaster