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 #include <rpc/rpc.h>
00035
00036
00037
00038
00039
00040
00041 #define DTN_MAX_ENDPOINT_ID 256
00042 #define DTN_MAX_PATH_LEN PATH_MAX
00043 #define DTN_MAX_EXEC_LEN ARG_MAX
00044 #define DTN_MAX_AUTHDATA 1024
00045 #define DTN_MAX_REGION_LEN 64
00046 #define DTN_MAX_BUNDLE_MEM 50000
00047 #define DTN_MAX_BLOCK_LEN 64
00048 #define DTN_MAX_BLOCKS 256
00049
00059 bool_t
00060 xdr_dtn_endpoint_id_t (XDR *xdrs, dtn_endpoint_id_t *objp)
00061 {
00062 register int32_t *buf;
00063
00064 int i;
00065 if (!xdr_opaque (xdrs, objp->uri, DTN_MAX_ENDPOINT_ID))
00066 return FALSE;
00067 return TRUE;
00068 }
00069
00074 bool_t
00075 xdr_dtn_reg_id_t (XDR *xdrs, dtn_reg_id_t *objp)
00076 {
00077 register int32_t *buf;
00078
00079 if (!xdr_u_int (xdrs, objp))
00080 return FALSE;
00081 return TRUE;
00082 }
00083
00088 bool_t
00089 xdr_dtn_timeval_t (XDR *xdrs, dtn_timeval_t *objp)
00090 {
00091 register int32_t *buf;
00092
00093 if (!xdr_u_int (xdrs, objp))
00094 return FALSE;
00095 return TRUE;
00096 }
00097
00101 #define DTN_TIMEOUT_INF ((dtn_timeval_t)-1)
00102
00103 bool_t
00104 xdr_dtn_timestamp_t (XDR *xdrs, dtn_timestamp_t *objp)
00105 {
00106 register int32_t *buf;
00107
00108 if (!xdr_u_int (xdrs, &objp->secs))
00109 return FALSE;
00110 if (!xdr_u_int (xdrs, &objp->seqno))
00111 return FALSE;
00112 return TRUE;
00113 }
00114
00124 bool_t
00125 xdr_dtn_service_tag_t (XDR *xdrs, dtn_service_tag_t *objp)
00126 {
00127 register int32_t *buf;
00128
00129 int i;
00130 if (!xdr_vector (xdrs, (char *)objp->tag, DTN_MAX_ENDPOINT_ID,
00131 sizeof (char), (xdrproc_t) xdr_char))
00132 return FALSE;
00133 return TRUE;
00134 }
00135
00148 bool_t
00149 xdr_dtn_reg_failure_action_t (XDR *xdrs, dtn_reg_failure_action_t *objp)
00150 {
00151 register int32_t *buf;
00152
00153 if (!xdr_enum (xdrs, (enum_t *) objp))
00154 return FALSE;
00155 return TRUE;
00156 }
00157
00162 bool_t
00163 xdr_dtn_reg_info_t (XDR *xdrs, dtn_reg_info_t *objp)
00164 {
00165 register int32_t *buf;
00166
00167 if (!xdr_dtn_endpoint_id_t (xdrs, &objp->endpoint))
00168 return FALSE;
00169 if (!xdr_dtn_reg_id_t (xdrs, &objp->regid))
00170 return FALSE;
00171 if (!xdr_dtn_reg_failure_action_t (xdrs, &objp->failure_action))
00172 return FALSE;
00173 if (!xdr_dtn_timeval_t (xdrs, &objp->expiration))
00174 return FALSE;
00175 if (!xdr_bool (xdrs, &objp->init_passive))
00176 return FALSE;
00177 if (!xdr_bytes (xdrs, (char **)&objp->script.script_val, (u_int *) &objp->script.script_len, DTN_MAX_EXEC_LEN))
00178 return FALSE;
00179 return TRUE;
00180 }
00181
00190 bool_t
00191 xdr_dtn_bundle_priority_t (XDR *xdrs, dtn_bundle_priority_t *objp)
00192 {
00193 register int32_t *buf;
00194
00195 if (!xdr_enum (xdrs, (enum_t *) objp))
00196 return FALSE;
00197 return TRUE;
00198 }
00199
00213 bool_t
00214 xdr_dtn_bundle_delivery_opts_t (XDR *xdrs, dtn_bundle_delivery_opts_t *objp)
00215 {
00216 register int32_t *buf;
00217
00218 if (!xdr_enum (xdrs, (enum_t *) objp))
00219 return FALSE;
00220 return TRUE;
00221 }
00222
00236 bool_t
00237 xdr_dtn_extension_block_flags_t (XDR *xdrs, dtn_extension_block_flags_t *objp)
00238 {
00239 register int32_t *buf;
00240
00241 if (!xdr_enum (xdrs, (enum_t *) objp))
00242 return FALSE;
00243 return TRUE;
00244 }
00245
00250 bool_t
00251 xdr_dtn_extension_block_t (XDR *xdrs, dtn_extension_block_t *objp)
00252 {
00253 register int32_t *buf;
00254
00255 if (!xdr_u_int (xdrs, &objp->type))
00256 return FALSE;
00257 if (!xdr_u_int (xdrs, &objp->flags))
00258 return FALSE;
00259 if (!xdr_bytes (xdrs, (char **)&objp->data.data_val, (u_int *) &objp->data.data_len, DTN_MAX_BLOCK_LEN))
00260 return FALSE;
00261 return TRUE;
00262 }
00263
00268 bool_t
00269 xdr_dtn_bundle_spec_t (XDR *xdrs, dtn_bundle_spec_t *objp)
00270 {
00271 register int32_t *buf;
00272
00273 if (!xdr_dtn_endpoint_id_t (xdrs, &objp->source))
00274 return FALSE;
00275 if (!xdr_dtn_endpoint_id_t (xdrs, &objp->dest))
00276 return FALSE;
00277 if (!xdr_dtn_endpoint_id_t (xdrs, &objp->replyto))
00278 return FALSE;
00279 if (!xdr_dtn_bundle_priority_t (xdrs, &objp->priority))
00280 return FALSE;
00281 if (!xdr_int (xdrs, &objp->dopts))
00282 return FALSE;
00283 if (!xdr_dtn_timeval_t (xdrs, &objp->expiration))
00284 return FALSE;
00285 if (!xdr_array (xdrs, (char **)&objp->blocks.blocks_val, (u_int *) &objp->blocks.blocks_len, DTN_MAX_BLOCKS,
00286 sizeof (dtn_extension_block_t), (xdrproc_t) xdr_dtn_extension_block_t))
00287 return FALSE;
00288 return TRUE;
00289 }
00290
00299 bool_t
00300 xdr_dtn_bundle_id_t (XDR *xdrs, dtn_bundle_id_t *objp)
00301 {
00302 register int32_t *buf;
00303
00304 if (!xdr_dtn_endpoint_id_t (xdrs, &objp->source))
00305 return FALSE;
00306 if (!xdr_dtn_timestamp_t (xdrs, &objp->creation_ts))
00307 return FALSE;
00308 if (!xdr_u_int (xdrs, &objp->frag_offset))
00309 return FALSE;
00310 if (!xdr_u_int (xdrs, &objp->orig_length))
00311 return FALSE;
00312 return TRUE;
00313 }
00318 bool_t
00319 xdr_dtn_status_report_reason_t (XDR *xdrs, dtn_status_report_reason_t *objp)
00320 {
00321 register int32_t *buf;
00322
00323 if (!xdr_enum (xdrs, (enum_t *) objp))
00324 return FALSE;
00325 return TRUE;
00326 }
00332 bool_t
00333 xdr_dtn_status_report_flags_t (XDR *xdrs, dtn_status_report_flags_t *objp)
00334 {
00335 register int32_t *buf;
00336
00337 if (!xdr_enum (xdrs, (enum_t *) objp))
00338 return FALSE;
00339 return TRUE;
00340 }
00341
00346 bool_t
00347 xdr_dtn_bundle_status_report_t (XDR *xdrs, dtn_bundle_status_report_t *objp)
00348 {
00349 register int32_t *buf;
00350
00351 if (!xdr_dtn_bundle_id_t (xdrs, &objp->bundle_id))
00352 return FALSE;
00353 if (!xdr_dtn_status_report_reason_t (xdrs, &objp->reason))
00354 return FALSE;
00355 if (!xdr_dtn_status_report_flags_t (xdrs, &objp->flags))
00356 return FALSE;
00357 if (!xdr_dtn_timestamp_t (xdrs, &objp->receipt_ts))
00358 return FALSE;
00359 if (!xdr_dtn_timestamp_t (xdrs, &objp->custody_tv_))
00360 return FALSE;
00361 if (!xdr_dtn_timestamp_t (xdrs, &objp->forwarding_tv_))
00362 return FALSE;
00363 if (!xdr_dtn_timestamp_t (xdrs, &objp->delivery_tv_))
00364 return FALSE;
00365 if (!xdr_dtn_timestamp_t (xdrs, &objp->deletion_tv_))
00366 return FALSE;
00367 if (!xdr_dtn_timestamp_t (xdrs, &objp->ack_by_app_tv_))
00368 return FALSE;
00369 return TRUE;
00370 }
00371
00395 bool_t
00396 xdr_dtn_bundle_payload_location_t (XDR *xdrs, dtn_bundle_payload_location_t *objp)
00397 {
00398 register int32_t *buf;
00399
00400 if (!xdr_enum (xdrs, (enum_t *) objp))
00401 return FALSE;
00402 return TRUE;
00403 }
00404
00405 bool_t
00406 xdr_dtn_bundle_payload_t (XDR *xdrs, dtn_bundle_payload_t *objp)
00407 {
00408 register int32_t *buf;
00409
00410 if (!xdr_dtn_bundle_payload_location_t (xdrs, &objp->location))
00411 return FALSE;
00412 if (!xdr_bytes (xdrs, (char **)&objp->filename.filename_val, (u_int *) &objp->filename.filename_len, DTN_MAX_PATH_LEN))
00413 return FALSE;
00414 if (!xdr_bytes (xdrs, (char **)&objp->buf.buf_val, (u_int *) &objp->buf.buf_len, DTN_MAX_BUNDLE_MEM))
00415 return FALSE;
00416 if (!xdr_pointer (xdrs, (char **)&objp->status_report, sizeof (dtn_bundle_status_report_t), (xdrproc_t) xdr_dtn_bundle_status_report_t))
00417 return FALSE;
00418 return TRUE;
00419 }