00001
00002
00003
00004
00005
00006 #ifndef _DTN_TYPES_H_RPCGEN
00007 #define _DTN_TYPES_H_RPCGEN
00008
00009 #include <rpc/rpc.h>
00010
00011
00012 #ifdef __cplusplus
00013 extern "C" {
00014 #endif
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #include <limits.h>
00039 #ifndef ARG_MAX
00040 #define ARG_MAX _POSIX_ARG_MAX
00041 #endif
00042
00043
00044
00045
00046
00047 #define DTN_MAX_ENDPOINT_ID 256
00048 #define DTN_MAX_PATH_LEN PATH_MAX
00049 #define DTN_MAX_EXEC_LEN ARG_MAX
00050 #define DTN_MAX_AUTHDATA 1024
00051 #define DTN_MAX_REGION_LEN 64
00052 #define DTN_MAX_BUNDLE_MEM 50000
00053 #define DTN_MAX_BLOCK_LEN 1024
00054 #define DTN_MAX_BLOCKS 256
00055
00065 struct dtn_endpoint_id_t {
00066 char uri[DTN_MAX_ENDPOINT_ID];
00067 };
00068 typedef struct dtn_endpoint_id_t dtn_endpoint_id_t;
00069
00074 typedef u_int dtn_reg_id_t;
00075
00080 typedef u_int dtn_timeval_t;
00081
00085 #define DTN_TIMEOUT_INF ((dtn_timeval_t)-1)
00086
00087 struct dtn_timestamp_t {
00088 u_int secs;
00089 u_int seqno;
00090 };
00091 typedef struct dtn_timestamp_t dtn_timestamp_t;
00092
00102 struct dtn_service_tag_t {
00103 char tag[DTN_MAX_ENDPOINT_ID];
00104 };
00105 typedef struct dtn_service_tag_t dtn_service_tag_t;
00106
00111 #define DTN_REGID_NONE 0
00112
00127 enum dtn_reg_flags_t {
00128 DTN_REG_DROP = 1,
00129 DTN_REG_DEFER = 2,
00130 DTN_REG_EXEC = 3,
00131 DTN_SESSION_CUSTODY = 4,
00132 DTN_SESSION_PUBLISH = 8,
00133 DTN_SESSION_SUBSCRIBE = 16,
00134 };
00135 typedef enum dtn_reg_flags_t dtn_reg_flags_t;
00136
00141 struct dtn_reg_info_t {
00142 dtn_endpoint_id_t endpoint;
00143 dtn_reg_id_t regid;
00144 u_int flags;
00145 dtn_timeval_t expiration;
00146 bool_t init_passive;
00147 struct {
00148 u_int script_len;
00149 char *script_val;
00150 } script;
00151 };
00152 typedef struct dtn_reg_info_t dtn_reg_info_t;
00153
00162 enum dtn_bundle_priority_t {
00163 COS_BULK = 0,
00164 COS_NORMAL = 1,
00165 COS_EXPEDITED = 2,
00166 COS_RESERVED = 3,
00167 };
00168 typedef enum dtn_bundle_priority_t dtn_bundle_priority_t;
00169
00186 enum dtn_bundle_delivery_opts_t {
00187 DOPTS_NONE = 0,
00188 DOPTS_CUSTODY = 1,
00189 DOPTS_DELIVERY_RCPT = 2,
00190 DOPTS_RECEIVE_RCPT = 4,
00191 DOPTS_FORWARD_RCPT = 8,
00192 DOPTS_CUSTODY_RCPT = 16,
00193 DOPTS_DELETE_RCPT = 32,
00194 DOPTS_SINGLETON_DEST = 64,
00195 DOPTS_MULTINODE_DEST = 128,
00196 DOPTS_DO_NOT_FRAGMENT = 256,
00197 };
00198 typedef enum dtn_bundle_delivery_opts_t dtn_bundle_delivery_opts_t;
00199
00213 enum dtn_extension_block_flags_t {
00214 BLOCK_FLAG_NONE = 0,
00215 BLOCK_FLAG_REPLICATE = 1,
00216 BLOCK_FLAG_REPORT = 2,
00217 BLOCK_FLAG_DELETE_BUNDLE = 4,
00218 BLOCK_FLAG_LAST = 8,
00219 BLOCK_FLAG_DISCARD_BLOCK = 16,
00220 BLOCK_FLAG_UNPROCESSED = 32,
00221 };
00222 typedef enum dtn_extension_block_flags_t dtn_extension_block_flags_t;
00223
00228 struct dtn_extension_block_t {
00229 u_int type;
00230 u_int flags;
00231 struct {
00232 u_int data_len;
00233 char *data_val;
00234 } data;
00235 };
00236 typedef struct dtn_extension_block_t dtn_extension_block_t;
00237
00245 struct dtn_sequence_id_t {
00246 struct {
00247 u_int data_len;
00248 char *data_val;
00249 } data;
00250 };
00251 typedef struct dtn_sequence_id_t dtn_sequence_id_t;
00252
00259 struct dtn_bundle_spec_t {
00260 dtn_endpoint_id_t source;
00261 dtn_endpoint_id_t dest;
00262 dtn_endpoint_id_t replyto;
00263 dtn_bundle_priority_t priority;
00264 int dopts;
00265 dtn_timeval_t expiration;
00266 dtn_timestamp_t creation_ts;
00267 dtn_reg_id_t delivery_regid;
00268 dtn_sequence_id_t sequence_id;
00269 dtn_sequence_id_t obsoletes_id;
00270 struct {
00271 u_int blocks_len;
00272 dtn_extension_block_t *blocks_val;
00273 } blocks;
00274 struct {
00275 u_int metadata_len;
00276 dtn_extension_block_t *metadata_val;
00277 } metadata;
00278 };
00279 typedef struct dtn_bundle_spec_t dtn_bundle_spec_t;
00280
00289 struct dtn_bundle_id_t {
00290 dtn_endpoint_id_t source;
00291 dtn_timestamp_t creation_ts;
00292 u_int frag_offset;
00293 u_int orig_length;
00294 };
00295 typedef struct dtn_bundle_id_t dtn_bundle_id_t;
00300 enum dtn_status_report_reason_t {
00301 REASON_NO_ADDTL_INFO = 0x00,
00302 REASON_LIFETIME_EXPIRED = 0x01,
00303 REASON_FORWARDED_UNIDIR_LINK = 0x02,
00304 REASON_TRANSMISSION_CANCELLED = 0x03,
00305 REASON_DEPLETED_STORAGE = 0x04,
00306 REASON_ENDPOINT_ID_UNINTELLIGIBLE = 0x05,
00307 REASON_NO_ROUTE_TO_DEST = 0x06,
00308 REASON_NO_TIMELY_CONTACT = 0x07,
00309 REASON_BLOCK_UNINTELLIGIBLE = 0x08,
00310 };
00311 typedef enum dtn_status_report_reason_t dtn_status_report_reason_t;
00317 enum dtn_status_report_flags_t {
00318 STATUS_RECEIVED = 0x01,
00319 STATUS_CUSTODY_ACCEPTED = 0x02,
00320 STATUS_FORWARDED = 0x04,
00321 STATUS_DELIVERED = 0x08,
00322 STATUS_DELETED = 0x10,
00323 STATUS_ACKED_BY_APP = 0x20,
00324 };
00325 typedef enum dtn_status_report_flags_t dtn_status_report_flags_t;
00326
00331 struct dtn_bundle_status_report_t {
00332 dtn_bundle_id_t bundle_id;
00333 dtn_status_report_reason_t reason;
00334 dtn_status_report_flags_t flags;
00335 dtn_timestamp_t receipt_ts;
00336 dtn_timestamp_t custody_ts;
00337 dtn_timestamp_t forwarding_ts;
00338 dtn_timestamp_t delivery_ts;
00339 dtn_timestamp_t deletion_ts;
00340 dtn_timestamp_t ack_by_app_ts;
00341 };
00342 typedef struct dtn_bundle_status_report_t dtn_bundle_status_report_t;
00343
00364 enum dtn_bundle_payload_location_t {
00365 DTN_PAYLOAD_FILE = 0,
00366 DTN_PAYLOAD_MEM = 1,
00367 DTN_PAYLOAD_TEMP_FILE = 2,
00368 };
00369 typedef enum dtn_bundle_payload_location_t dtn_bundle_payload_location_t;
00370
00371 struct dtn_bundle_payload_t {
00372 dtn_bundle_payload_location_t location;
00373 struct {
00374 u_int filename_len;
00375 char *filename_val;
00376 } filename;
00377 struct {
00378 u_int buf_len;
00379 char *buf_val;
00380 } buf;
00381 dtn_bundle_status_report_t *status_report;
00382 };
00383 typedef struct dtn_bundle_payload_t dtn_bundle_payload_t;
00384
00385
00386
00387 #if defined(__STDC__) || defined(__cplusplus)
00388 extern bool_t xdr_dtn_endpoint_id_t (XDR *, dtn_endpoint_id_t*);
00389 extern bool_t xdr_dtn_reg_id_t (XDR *, dtn_reg_id_t*);
00390 extern bool_t xdr_dtn_timeval_t (XDR *, dtn_timeval_t*);
00391 extern bool_t xdr_dtn_timestamp_t (XDR *, dtn_timestamp_t*);
00392 extern bool_t xdr_dtn_service_tag_t (XDR *, dtn_service_tag_t*);
00393 extern bool_t xdr_dtn_reg_flags_t (XDR *, dtn_reg_flags_t*);
00394 extern bool_t xdr_dtn_reg_info_t (XDR *, dtn_reg_info_t*);
00395 extern bool_t xdr_dtn_bundle_priority_t (XDR *, dtn_bundle_priority_t*);
00396 extern bool_t xdr_dtn_bundle_delivery_opts_t (XDR *, dtn_bundle_delivery_opts_t*);
00397 extern bool_t xdr_dtn_extension_block_flags_t (XDR *, dtn_extension_block_flags_t*);
00398 extern bool_t xdr_dtn_extension_block_t (XDR *, dtn_extension_block_t*);
00399 extern bool_t xdr_dtn_sequence_id_t (XDR *, dtn_sequence_id_t*);
00400 extern bool_t xdr_dtn_bundle_spec_t (XDR *, dtn_bundle_spec_t*);
00401 extern bool_t xdr_dtn_bundle_id_t (XDR *, dtn_bundle_id_t*);
00402 extern bool_t xdr_dtn_status_report_reason_t (XDR *, dtn_status_report_reason_t*);
00403 extern bool_t xdr_dtn_status_report_flags_t (XDR *, dtn_status_report_flags_t*);
00404 extern bool_t xdr_dtn_bundle_status_report_t (XDR *, dtn_bundle_status_report_t*);
00405 extern bool_t xdr_dtn_bundle_payload_location_t (XDR *, dtn_bundle_payload_location_t*);
00406 extern bool_t xdr_dtn_bundle_payload_t (XDR *, dtn_bundle_payload_t*);
00407
00408 #else
00409 extern bool_t xdr_dtn_endpoint_id_t ();
00410 extern bool_t xdr_dtn_reg_id_t ();
00411 extern bool_t xdr_dtn_timeval_t ();
00412 extern bool_t xdr_dtn_timestamp_t ();
00413 extern bool_t xdr_dtn_service_tag_t ();
00414 extern bool_t xdr_dtn_reg_flags_t ();
00415 extern bool_t xdr_dtn_reg_info_t ();
00416 extern bool_t xdr_dtn_bundle_priority_t ();
00417 extern bool_t xdr_dtn_bundle_delivery_opts_t ();
00418 extern bool_t xdr_dtn_extension_block_flags_t ();
00419 extern bool_t xdr_dtn_extension_block_t ();
00420 extern bool_t xdr_dtn_sequence_id_t ();
00421 extern bool_t xdr_dtn_bundle_spec_t ();
00422 extern bool_t xdr_dtn_bundle_id_t ();
00423 extern bool_t xdr_dtn_status_report_reason_t ();
00424 extern bool_t xdr_dtn_status_report_flags_t ();
00425 extern bool_t xdr_dtn_bundle_status_report_t ();
00426 extern bool_t xdr_dtn_bundle_payload_location_t ();
00427 extern bool_t xdr_dtn_bundle_payload_t ();
00428
00429 #endif
00430
00431 #ifdef __cplusplus
00432 }
00433 #endif
00434
00435 #endif