5 Author: Pekka Riikonen <priikone@poseidon.pspt.fi>
7 Copyright (C) 1997 - 2000 Pekka Riikonen
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
21 #ifndef SILCPROTOCOL_H
22 #define SILCPROTOCOL_H
24 /* Protocol type definition. */
25 typedef unsigned char SilcProtocolType;
27 /* Protocol state definition. */
28 typedef unsigned char SilcProtocolState;
30 /* Protocol states. Do NOT change the values of these states, especially
31 the START state or you break every protocol. */
32 #define SILC_PROTOCOL_STATE_UNKNOWN 0
33 #define SILC_PROTOCOL_STATE_START 1
34 #define SILC_PROTOCOL_STATE_END 253
35 #define SILC_PROTOCOL_STATE_ERROR 254
37 /* Connection Authentication protocols' authentication methods */
38 #define SILC_PROTOCOL_CONN_AUTH_NONE 0
39 #define SILC_PROTOCOL_CONN_AUTH_PASSWORD 1
40 #define SILC_PROTOCOL_CONN_AUTH_PUBLIC_KEY 2
42 /* Type definition for above auth methods */
43 typedef unsigned char SilcProtocolAuthMeth;
48 Short description of the field following:
52 Protocol type. This is enumeration.
54 SilcProtocolCallback callback;
56 Callback function for the protocol. This is SilcTaskCallback function
57 pointer as the protocols in SILC are executed as timeout tasks.
59 The object expands to another structure as well. Short description of
60 these fields following:
62 SilcProtocolObject *protocol
64 This is the pointer to the protocol object defined above.
66 SilcProtocolState state
68 Protocol state. This is enumeration. The state of the protocol can
69 be changed in the callback function.
73 Context to be sent for the callback function. This is usually
74 object for either SILC client or server. However, this abstraction
75 makes it possible that this pointer could be some other object as well.
77 SilcProtocolExecute execute;
79 Executes the protocol and its states. The correct state must be set
80 before calling this function. The state is usually set in the protocol
83 SilcProtocolExecute execute_final;
85 Executes the final callback function of the protocol. Read on.
87 SilcProtocolFinalCallback final_callback;
89 This is a callback function that is called with timeout _after_ the
90 protocol has finished or error occurs. If this is NULL, naturally
91 nothing will be executed. Protocol should call this function only at
92 SILC_PROTOCOL_STATE_END and SILC_PROTOCOL_STATE_ERROR states.
95 typedef SilcTaskCallback SilcProtocolCallback;
97 typedef struct SilcProtocolObjectStruct {
98 SilcProtocolType type;
99 SilcProtocolCallback callback;
101 struct SilcProtocolObjectStruct *next;
102 } SilcProtocolObject;
104 typedef SilcTaskCallback SilcProtocolFinalCallback;
105 typedef SilcTaskCallback SilcProtocolExecute;
107 typedef struct SilcProtocolStruct {
108 SilcProtocolObject *protocol;
109 SilcProtocolState state;
112 // SilcProtocolExecute execute;
113 void (*execute)(void *, int, void *, int, long, long);
114 SilcProtocolExecute execute_final;
115 SilcProtocolFinalCallback final_callback;
119 void silc_protocol_register(SilcProtocolType type,
120 SilcProtocolCallback callback);
121 void silc_protocol_unregister(SilcProtocolType type,
122 SilcProtocolCallback callback);
123 void silc_protocol_alloc(SilcProtocolType type, SilcProtocol *new_protocol,
124 void *context, SilcProtocolFinalCallback callback);
125 void silc_protocol_free(SilcProtocol protocol);
126 void silc_protocol_execute(void *qptr, int type,
127 void *context, int fd,
128 long secs, long usecs);
129 void silc_protocol_execute_final(void *qptr, int type,
130 void *context, int fd);