32
32
%%-----------------------------------------------------------------
33
33
%% External exports
34
34
%%-----------------------------------------------------------------
35
-export([code/4, decode/4, string_code/1, string_decode/1,
35
-export([code/4, decode/4, string_decode/1,
36
string_code/1, string_code/2, string_code/3, string_code/4,
36
37
get_key/1, get_key/2, get_typeID/1, create/9,
37
38
get_objkey/1, check_nil/1, get_privfield/1, set_privfield/2,
38
39
get_orbfield/1, set_orbfield/2,
238
239
{'internal_registered', {pseudo, Key}, OrberDef, Flags, Module};
240
241
{'internal_registered', Key, OrberDef, Flags, Module}
244
orber:dbg("[~p] iop_ior:get_key(~p); Invalid IOR",
245
[?LINE, What], ?DEBUG_LEVEL),
246
corba:raise(#'INV_OBJREF'{completion_status=?COMPLETED_NO}).
243
249
get_key(#'IOP_IOR'{profiles=P}, Exclude) ->
244
get_key_1(P, true, 0, Exclude, #host_data{}).
250
get_key_1(P, true, 0, Exclude, #host_data{});
251
get_key(What, _Exclude) ->
252
orber:dbg("[~p] iop_ior:get_key(~p); Invalid IOR",
253
[?LINE, What], ?DEBUG_LEVEL),
254
corba:raise(#'INV_OBJREF'{completion_status=?COMPLETED_NO}).
246
257
get_key_1([], false, _, _, _) ->
247
258
orber:dbg("[~p] iop_ior:get_key_1([]); bad object reference, profile not found.",
1112
1123
%% Func: string_code/1
1113
1124
%%-----------------------------------------------------------------
1114
1125
string_code(IOR) ->
1115
Version = orber:giop_version(),
1116
{IorByteSeq0, Length0} = cdr_encode:enc_type('tk_octet', Version, 0, [], 0),
1117
{IorByteSeq, _} = code(Version, IOR, IorByteSeq0, Length0),
1126
Flags = orber:get_flags(),
1127
case ?ORB_FLAG_TEST(Flags, ?ORB_ENV_ENABLE_NAT) of
1129
string_code(IOR, Flags, orber:host(),
1130
orber:iiop_port(), orber:iiop_ssl_port());
1132
string_code(IOR, Flags, orber:nat_host(),
1133
orber:nat_iiop_port(), orber:nat_iiop_ssl_port())
1136
string_code(IOR, Host) ->
1137
Flags = orber:get_flags(),
1138
case ?ORB_FLAG_TEST(Flags, ?ORB_ENV_ENABLE_NAT) of
1140
string_code(IOR, Flags, Host,
1141
orber:iiop_port(), orber:iiop_ssl_port());
1143
string_code(IOR, Flags, Host,
1144
orber:nat_iiop_port(), orber:nat_iiop_ssl_port())
1147
string_code(IOR, Host, Port) ->
1148
Flags = orber:get_flags(),
1149
case ?ORB_FLAG_TEST(Flags, ?ORB_ENV_ENABLE_NAT) of
1151
string_code(IOR, Flags, Host, Port, orber:iiop_ssl_port());
1153
string_code(IOR, Flags, Host, Port, orber:nat_iiop_ssl_port())
1156
string_code(IOR, Host, Port, SSLPort) ->
1157
string_code(IOR, orber:get_flags(), Host, Port, SSLPort).
1159
string_code(IOR, Flags, IP, Port, SSLPort) ->
1160
Env = #giop_env{version = orber:giop_version(),
1161
flags = Flags, host = IP, iiop_port = Port,
1162
iiop_ssl_port = SSLPort, domain = orber:domain(),
1163
partial_security = orber:partial_security()},
1164
{IorByteSeq0, Length0} = cdr_encode:enc_type('tk_octet', Env, 0, [], 0),
1165
{IorByteSeq, _} = code(Env, IOR, IorByteSeq0, Length0),
1118
1166
IorByteSeq1 = binary_to_list(list_to_binary(lists:reverse(IorByteSeq))),
1119
1167
IorHexSeq = bytestring_to_hexstring(IorByteSeq1),
1120
1168
[$I,$O,$R,$: | IorHexSeq].
1122
1170
%%-----------------------------------------------------------------
1123
1171
%% Func: code/3
1124
1172
%%-----------------------------------------------------------------
1125
code(Version, #'IOP_IOR'{type_id=TypeId, profiles=Profiles}, Bytes, Len) ->
1173
code(#giop_env{version = Version} = Env, #'IOP_IOR'{type_id=TypeId, profiles=Profiles}, Bytes, Len) ->
1126
1174
ProfileSeq =code_profile_datas(Version, Profiles),
1128
1176
cdr_encode:enc_type(?IOR_TYPEDEF,
1130
1178
#'IOP_IOR'{type_id=TypeId, profiles=ProfileSeq},
1132
code(Version, {Mod, Type, Key, UserDef, OrberDef, Flags}, Bytes, Len) ->
1133
EnvFlags = orber:get_flags(),
1180
%% No Local Interface supplied. Use configuration parameters.
1181
code(#giop_env{version = Version, host = 0, flags = EnvFlags} = Env,
1182
{Mod, Type, Key, UserDef, OrberDef, Flags}, Bytes, Len) ->
1134
1183
MC = case ?ORB_FLAG_TEST(EnvFlags, ?ORB_ENV_EXCLUDE_CODESET_COMPONENT) of
1151
1200
MC, Flags, EnvFlags)
1154
code(Version, IOR, Bytes, Len).
1203
code(Env, IOR, Bytes, Len);
1204
code(#giop_env{version = Version, host = Host, iiop_port = IIOPort,
1205
iiop_ssl_port = SSLPort, flags = EnvFlags} = Env,
1206
{Mod, Type, Key, UserDef, OrberDef, Flags}, Bytes, Len) ->
1207
MC = case ?ORB_FLAG_TEST(EnvFlags, ?ORB_ENV_EXCLUDE_CODESET_COMPONENT) of
1211
[#'IOP_TaggedComponent'{tag=?TAG_CODE_SETS,
1212
component_data=?DEFAULT_CODESETS}]
1214
IOR = create(Version, Mod:typeID(), Host, check_port(IIOPort, normal),
1215
check_port(SSLPort, ssl), {Mod, Type, Key, UserDef, OrberDef, Flags},
1216
MC, Flags, EnvFlags),
1217
code(Env, IOR, Bytes, Len).
1219
check_port(Port, _Type) when integer(Port) ->
1221
check_port(_, normal) ->
1223
check_port(_, ssl) ->
1224
orber:iiop_ssl_port().
1157
1226
code_profile_datas(_, []) ->