00001
00002
00003
00004
00005
00006 #include "dtn_types.h"
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include <limits.h>
00030 #ifndef ARG_MAX
00031 #define ARG_MAX _POSIX_ARG_MAX
00032 #endif
00033
00034
00035
00036
00037
00038 #define DTN_MAX_ENDPOINT_ID 256
00039 #define DTN_MAX_PATH_LEN PATH_MAX
00040 #define DTN_MAX_EXEC_LEN ARG_MAX
00041 #define DTN_MAX_AUTHDATA 1024
00042 #define DTN_MAX_REGION_LEN 64
00043 #define DTN_MAX_BUNDLE_MEM 50000
00044 #define DTN_MAX_BLOCK_LEN 1024
00045 #define DTN_MAX_BLOCKS 256
00046
00056 bool_t
00057 xdr_dtn_endpoint_id_t (XDR *xdrs, dtn_endpoint_id_t *objp)
00058 {
00059 register int32_t *buf;
00060
00061 int i;
00062 if (!xdr_opaque (xdrs, objp->uri, DTN_MAX_ENDPOINT_ID))
00063 return FALSE;
00064 return TRUE;
00065 }
00066
00071 bool_t
00072 xdr_dtn_reg_id_t (XDR *xdrs, dtn_reg_id_t *objp)
00073 {
00074 register int32_t *buf;
00075
00076 if (!xdr_u_int (xdrs, objp))
00077 return FALSE;
00078 return TRUE;
00079 }
00080
00085 bool_t
00086 xdr_dtn_timeval_t (XDR *xdrs, dtn_timeval_t *objp)
00087 {
00088 register int32_t *buf;
00089
00090 if (!xdr_u_int (xdrs, objp))
00091 return FALSE;
00092 return TRUE;
00093 }
00094
00098 #define DTN_TIMEOUT_INF ((dtn_timeval_t)-1)
00099
00100 bool_t
00101 xdr_dtn_timestamp_t (XDR *xdrs, dtn_timestamp_t *objp)
00102 {
00103 register int32_t *buf;
00104
00105 if (!xdr_u_int (xdrs, &objp->secs))
00106 return FALSE;
00107 if (!xdr_u_int (xdrs, &objp->seqno))
00108 return FALSE;
00109 return TRUE;
00110 }
00111
00121 bool_t
00122 xdr_dtn_service_tag_t (XDR *xdrs, dtn_service_tag_t *objp)
00123 {
00124 register int32_t *buf;
00125
00126 int i;
00127 if (!xdr_vector (xdrs, (char *)objp->tag, DTN_MAX_ENDPOINT_ID,
00128 sizeof (char), (xdrproc_t) xdr_char))
00129 return FALSE;
00130 return TRUE;
00131 }
00132
00152 bool_t
00153 xdr_dtn_reg_flags_t (XDR *xdrs, dtn_reg_flags_t *objp)
00154 {
00155 register int32_t *buf;
00156
00157 if (!xdr_enum (xdrs, (enum_t *) objp))
00158 return FALSE;
00159 return TRUE;
00160 }
00161
00166 bool_t
00167 xdr_dtn_reg_info_t (XDR *xdrs, dtn_reg_info_t *objp)
00168 {
00169 register int32_t *buf;
00170
00171 if (!xdr_dtn_endpoint_id_t (xdrs, &objp->endpoint))
00172 return FALSE;
00173 if (!xdr_dtn_reg_id_t (xdrs, &objp->regid))
00174 return FALSE;
00175 if (!xdr_u_int (xdrs, &objp->flags))
00176 return FALSE;
00177 if (!xdr_dtn_timeval_t (xdrs, &objp->expiration))
00178 return FALSE;
00179 if (!xdr_bool (xdrs, &objp->init_passive))
00180 return FALSE;
00181 if (!xdr_bytes (xdrs, (char **)&objp->script.script_val, (u_int *) &objp->script.script_len, DTN_MAX_EXEC_LEN))
00182 return FALSE;
00183 return TRUE;
00184 }
00185
00194 bool_t
00195 xdr_dtn_bundle_priority_t (XDR *xdrs, dtn_bundle_priority_t *objp)
00196 {
00197 register int32_t *buf;
00198
00199 if (!xdr_enum (xdrs, (enum_t *) objp))
00200 return FALSE;
00201 return TRUE;
00202 }
00203
00220 bool_t
00221 xdr_dtn_bundle_delivery_opts_t (XDR *xdrs, dtn_bundle_delivery_opts_t *objp)
00222 {
00223 register int32_t *buf;
00224
00225 if (!xdr_enum (xdrs, (enum_t *) objp))
00226 return FALSE;
00227 return TRUE;
00228 }
00229
00243 bool_t
00244 xdr_dtn_extension_block_flags_t (XDR *xdrs, dtn_extension_block_flags_t *objp)
00245 {
00246 register int32_t *buf;
00247
00248 if (!xdr_enum (xdrs, (enum_t *) objp))
00249 return FALSE;
00250 return TRUE;
00251 }
00252
00257 bool_t
00258 xdr_dtn_extension_block_t (XDR *xdrs, dtn_extension_block_t *objp)
00259 {
00260 register int32_t *buf;
00261
00262 if (!xdr_u_int (xdrs, &objp->type))
00263 return FALSE;
00264 if (!xdr_u_int (xdrs, &objp->flags))
00265 return FALSE;
00266 if (!xdr_bytes (xdrs, (char **)&objp->data.data_val, (u_int *) &objp->data.data_len, DTN_MAX_BLOCK_LEN))
00267 return FALSE;
00268 return TRUE;
00269 }
00270
00278 bool_t
00279 xdr_dtn_sequence_id_t (XDR *xdrs, dtn_sequence_id_t *objp)
00280 {
00281 register int32_t *buf;
00282
00283 if (!xdr_bytes (xdrs, (char **)&objp->data.data_val, (u_int *) &objp->data.data_len, DTN_MAX_BLOCK_LEN))
00284 return FALSE;
00285 return TRUE;
00286 }
00287
00294 bool_t
00295 xdr_dtn_bundle_spec_t (XDR *xdrs, dtn_bundle_spec_t *objp)
00296 {
00297 register int32_t *buf;
00298
00299 if (!xdr_dtn_endpoint_id_t (xdrs, &objp->source))
00300 return FALSE;
00301 if (!xdr_dtn_endpoint_id_t (xdrs, &objp->dest))
00302 return FALSE;
00303 if (!xdr_dtn_endpoint_id_t (xdrs, &objp->replyto))
00304 return FALSE;
00305 if (!xdr_dtn_bundle_priority_t (xdrs, &objp->priority))
00306 return FALSE;
00307 if (!xdr_int (xdrs, &objp->dopts))
00308 return FALSE;
00309 if (!xdr_dtn_timeval_t (xdrs, &objp->expiration))
00310 return FALSE;
00311 if (!xdr_dtn_timestamp_t (xdrs, &objp->creation_ts))
00312 return FALSE;
00313 if (!xdr_dtn_reg_id_t (xdrs, &objp->delivery_regid))
00314 return FALSE;
00315 if (!xdr_dtn_sequence_id_t (xdrs, &objp->sequence_id))
00316 return FALSE;
00317 if (!xdr_dtn_sequence_id_t (xdrs, &objp->obsoletes_id))
00318 return FALSE;
00319 if (!xdr_array (xdrs, (char **)&objp->blocks.blocks_val, (u_int *) &objp->blocks.blocks_len, DTN_MAX_BLOCKS,
00320 sizeof (dtn_extension_block_t), (xdrproc_t) xdr_dtn_extension_block_t))
00321 return FALSE;
00322 if (!xdr_array (xdrs, (char **)&objp->metadata.metadata_val, (u_int *) &objp->metadata.metadata_len, DTN_MAX_BLOCKS,
00323 sizeof (dtn_extension_block_t), (xdrproc_t) xdr_dtn_extension_block_t))
00324 return FALSE;
00325 return TRUE;
00326 }
00327
00336 bool_t
00337 xdr_dtn_bundle_id_t (XDR *xdrs, dtn_bundle_id_t *objp)
00338 {
00339 register int32_t *buf;
00340
00341 if (!xdr_dtn_endpoint_id_t (xdrs, &objp->source))
00342 return FALSE;
00343 if (!xdr_dtn_timestamp_t (xdrs, &objp->creation_ts))
00344 return FALSE;
00345 if (!xdr_u_int (xdrs, &objp->frag_offset))
00346 return FALSE;
00347 if (!xdr_u_int (xdrs, &objp->orig_length))
00348 return FALSE;
00349 return TRUE;
00350 }
00355 bool_t
00356 xdr_dtn_status_report_reason_t (XDR *xdrs, dtn_status_report_reason_t *objp)
00357 {
00358 register int32_t *buf;
00359
00360 if (!xdr_enum (xdrs, (enum_t *) objp))
00361 return FALSE;
00362 return TRUE;
00363 }
00369 bool_t
00370 xdr_dtn_status_report_flags_t (XDR *xdrs, dtn_status_report_flags_t *objp)
00371 {
00372 register int32_t *buf;
00373
00374 if (!xdr_enum (xdrs, (enum_t *) objp))
00375 return FALSE;
00376 return TRUE;
00377 }
00378
00383 bool_t
00384 xdr_dtn_bundle_status_report_t (XDR *xdrs, dtn_bundle_status_report_t *objp)
00385 {
00386 register int32_t *buf;
00387
00388 if (!xdr_dtn_bundle_id_t (xdrs, &objp->bundle_id))
00389 return FALSE;
00390 if (!xdr_dtn_status_report_reason_t (xdrs, &objp->reason))
00391 return FALSE;
00392 if (!xdr_dtn_status_report_flags_t (xdrs, &objp->flags))
00393 return FALSE;
00394 if (!xdr_dtn_timestamp_t (xdrs, &objp->receipt_ts))
00395 return FALSE;
00396 if (!xdr_dtn_timestamp_t (xdrs, &objp->custody_ts))
00397 return FALSE;
00398 if (!xdr_dtn_timestamp_t (xdrs, &objp->forwarding_ts))
00399 return FALSE;
00400 if (!xdr_dtn_timestamp_t (xdrs, &objp->delivery_ts))
00401 return FALSE;
00402 if (!xdr_dtn_timestamp_t (xdrs, &objp->deletion_ts))
00403 return FALSE;
00404 if (!xdr_dtn_timestamp_t (xdrs, &objp->ack_by_app_ts))
00405 return FALSE;
00406 return TRUE;
00407 }
00408
00429 bool_t
00430 xdr_dtn_bundle_payload_location_t (XDR *xdrs, dtn_bundle_payload_location_t *objp)
00431 {
00432 register int32_t *buf;
00433
00434 if (!xdr_enum (xdrs, (enum_t *) objp))
00435 return FALSE;
00436 return TRUE;
00437 }
00438
00439 bool_t
00440 xdr_dtn_bundle_payload_t (XDR *xdrs, dtn_bundle_payload_t *objp)
00441 {
00442 register int32_t *buf;
00443
00444 if (!xdr_dtn_bundle_payload_location_t (xdrs, &objp->location))
00445 return FALSE;
00446 if (!xdr_bytes (xdrs, (char **)&objp->filename.filename_val, (u_int *) &objp->filename.filename_len, DTN_MAX_PATH_LEN))
00447 return FALSE;
00448 if (!xdr_bytes (xdrs, (char **)&objp->buf.buf_val, (u_int *) &objp->buf.buf_len, DTN_MAX_BUNDLE_MEM))
00449 return FALSE;
00450 if (!xdr_pointer (xdrs, (char **)&objp->status_report, sizeof (dtn_bundle_status_report_t), (xdrproc_t) xdr_dtn_bundle_status_report_t))
00451 return FALSE;
00452 return TRUE;
00453 }