GIOPSendBuffer * giop_send_buffer_use_locate_request (GIOPVersion giop_version, CORBA_unsigned_long request_id, const CORBA_sequence_CORBA_octet *objkey) { GIOPSendBuffer *buf = giop_send_buffer_use(giop_version); buf->msg.header.message_type = GIOP_LOCATEREQUEST; buf->msg.u.locate_request_1_0.request_id = request_id; giop_send_buffer_append(buf, &buf->msg.u.locate_request_1_0.request_id, sizeof(CORBA_unsigned_long)); switch(giop_version) { case GIOP_1_0: case GIOP_1_1: giop_send_buffer_append_aligned(buf, &objkey->_length, sizeof(CORBA_unsigned_long)); giop_send_buffer_append(buf, objkey->_buffer, objkey->_length); break; case GIOP_1_2: giop_send_buffer_append(buf, &giop_1_2_target_type, sizeof(giop_1_2_target_type)); giop_send_buffer_append_aligned(buf, &objkey->_length, sizeof(CORBA_unsigned_long)); giop_send_buffer_append(buf, objkey->_buffer, objkey->_length); default: break; } return buf; }
GIOPSendBuffer * giop_send_buffer_use_request (GIOPVersion giop_version, CORBA_unsigned_long request_id, CORBA_boolean response_expected, const CORBA_sequence_CORBA_octet *objkey, const struct iovec *operation_vec, const struct iovec *principal_vec) { GIOPSendBuffer *buf = giop_send_buffer_use (giop_version); struct iovec zerovec; if(!principal_vec) { zerovec.iov_base = (gpointer) giop_zero_buf; zerovec.iov_len = sizeof (CORBA_unsigned_long); principal_vec = &zerovec; } buf->msg.header.message_type = GIOP_REQUEST; giop_send_buffer_align (buf, sizeof(CORBA_unsigned_long)); switch (giop_version) { case GIOP_1_0: case GIOP_1_1: buf->msg.u.request_1_0.request_id = request_id; buf->msg.u.request_1_0.response_expected = response_expected; giop_send_buffer_append (buf, (const guchar *)iop_service_context_data, sizeof(iop_service_context_data)); giop_send_buffer_append (buf, &buf->msg.u.request_1_0.request_id, sizeof(CORBA_unsigned_long)); giop_send_buffer_append (buf, &buf->msg.u.request_1_0.response_expected, sizeof(CORBA_boolean)); giop_send_buffer_append_aligned (buf, &objkey->_length, sizeof(CORBA_unsigned_long)); giop_send_buffer_append (buf, objkey->_buffer, objkey->_length); giop_send_buffer_align (buf, sizeof(CORBA_unsigned_long)); giop_send_buffer_append (buf, operation_vec->iov_base, operation_vec->iov_len); giop_send_buffer_append (buf, principal_vec->iov_base, principal_vec->iov_len); break; case GIOP_1_2: buf->msg.u.request_1_2.request_id = request_id; buf->msg.u.request_1_2.response_flags = response_expected ? 0x3 /* SYNC_WITH_TARGET */ : 0x0 /* SYNC_NONE */; giop_send_buffer_align (buf, sizeof(CORBA_unsigned_long)); giop_send_buffer_append (buf, &buf->msg.u.request_1_2.request_id, sizeof(CORBA_unsigned_long)); giop_send_buffer_append (buf, &buf->msg.u.request_1_2.response_flags, sizeof(CORBA_octet)); giop_send_buffer_append (buf, giop_zero_buf, 3); giop_send_buffer_append (buf, &giop_1_2_target_type, 2); /* We always use GIOP::KeyAddr addressing - the only sane way */ giop_send_buffer_append_aligned (buf, &objkey->_length, sizeof(CORBA_unsigned_long)); giop_send_buffer_append (buf, objkey->_buffer, objkey->_length); giop_send_buffer_align (buf, sizeof(CORBA_unsigned_long)); giop_send_buffer_append (buf, operation_vec->iov_base, operation_vec->iov_len); giop_send_buffer_append (buf, (const guchar *)iop_service_context_data, sizeof(iop_service_context_data)); giop_send_buffer_align (buf, 8); /* alignment for the body */ default: break; } return buf; }
void ORBit_Context_marshal (CORBA_Context ctx, const ORBit_ContextMarshalItem *mlist, CORBA_unsigned_long nitems, GIOPSendBuffer *buf) { CORBA_unsigned_long real_nitems, ltmp; guchar *marker; int i; marker = giop_send_buffer_append_aligned (buf, &nitems, 4); if (!ctx->mappings) { real_nitems = 0; memcpy (marker, &real_nitems, 4); return; } for (real_nitems = i = 0; i < nitems; i++) { char *value; value = g_hash_table_lookup (ctx->mappings, mlist[i].str); if (!value) continue; /* Key */ giop_send_buffer_append_aligned (buf, &mlist[i].len, sizeof(mlist[i].len)); giop_send_buffer_append (buf, mlist[i].str, mlist[i].len); real_nitems++; /* Value */ ltmp = strlen (value) + 1; giop_send_buffer_append_aligned (buf, <mp, 4); giop_send_buffer_append (buf, value, ltmp); real_nitems++; } memcpy (marker, &real_nitems, 4); }