| Title: | DECmcc user notes file. Does not replace IPMT. |
| Notice: | Use IPMT for problems. Newsletter location in note 6187 |
| Moderator: | TAEC::BEROUD |
| Created: | Mon Aug 21 1989 |
| Last Modified: | Wed Jun 04 1997 |
| Last Successful Update: | Fri Jun 06 1997 |
| Number of topics: | 6497 |
| Total number of notes: | 27359 |
I don't seem to be able to get an MCCReply argument out.
One of the directives in my MM invokes one of the others, through
mcc_call_access. If the called directive (now the service provider)
returns an exception with an argument, like NOENTITY, I'd like to roll
that into an exception return from the caller (client).
I decided the client will return MCC_K_CANNOT_COMPLETE with an argument of
MCC_K_ARG_SVC_ERR. The datatype of that argument is MCCReply. The entries
in the reply tables look like:
static dt_reply_arg_list ReplyArg_svc_err[] = {
offsetof(dt__LocalContext, ReplyArg_p1), MCC_K_ARG_SVC_ERR,
REPLY_K_END_OF_ARG_LIST
};
/* DHSM__UNABLE_TO_COMPLETE_SVC 7 */
MCC_S_COMMON_EXCEPTION,
MCC_K_CANNOT_COMPLETE,
&ReplyArg_svc_err,
When my do_directive routine returns with a value of MCC_S_COMMON_EXCEPTION,
p_context->reply_index is DHSM__UNABLE_TO_COMPLETE_SVC and the
p_context->ReplyArg_p1 points at a descriptor for an MCC_R_Reply_List
record. I made sure none of the addresses in that record pointed at a
value on the stack. Everything is static or on the heap.
The end_directive routine is invoked and passes the callargs and context
pointers to mcc_desframe_set_cvr_and_reply. The return status is
"invalid descriptor". I can't see anything wrong with either the
ReplyArg or out_p descriptors:
*DHSM_AM__ARCHIVE\p_context->ReplyArg_p1
mcc_w_maxstrlen: 52
mcc_b_dtype: 0
mcc_b_class: 1
mcc_a_pointer: 1427724
mcc_w_curlen: 52
mcc_b_flags: 0
mcc_b_ver: 1
mcc_l_id: 4
mcc_l_dt: 59
mcc_a_link: 0
===
So, instead of set_cvr_and_reply, I used ilv_put_mccreply and friends
to encode the reply list into out_p myself, and modified end_directive
so it doesn't call set_cvr_and_reply for that particular reply_index.
FCL displays "The requested operation cannot be completed" but then
instead of displaying the contents of the reply list argument it does
"%MCC-I-REQ_NOT_SATIS, request not satisfied" and that's all.
The output from FCL with tracing follows:
DECmcc (X1.1.0)
FCL PM Arguments before call_function:
AES DUMP of ENTITY IN:
depth=4 class code= 10 instance = �class code= 11 instance = no curlen class code= 12 instance = no curlen class code= 13 instance = a
ILV DUMP of INP:
[ 0 ] (
[ 1 ] aa 00 04 00 de 11 a0 aa f9 6f 56 de 8e 00 05 00 01 01 61 00
00
)
ILV DUMP of INQ: in_q is NULL
ATTRIBUTE PARTITION: 10
HANDLE STATE, before call: FIRST
*******************************************
FCL PM Arguments on return from call_function:
ILV DUMP of OUTP:
[ 2 ] (
[ 4 ] (
[ 1 ] 01
[ 2 ] 58 02 00 00
[ 3 ] 03 26 80 59
[ 4 ] 0c
[ 5 ] (
[ 0 ] (
[ 1 ] 01
[ 2 ] 14
[ 3 ] 01
[ 4 ] 05
[ 5 ] aa 00 04 00 de 11 a0 aa f9 6f 56 de 8e 00 05 00 01 01 61 00
00
)
[ 1 ] (
[ 1 ] 01
[ 2 ] 0c
[ 3 ] 7f
[ 4 ] 00
[ 5 ]
)
[ 2 ] (
[ 1 ] 01
[ 2 ] 0d
[ 3 ] 01
[ 4 ] 06
[ 5 ] 61 -- a
)
)
[ 6 ] 0a
[ 7 ] (
)
[ 8 ] (
)
[ 9 ] (
)
[ 10 ] 60 59 93 b0 50 5a c9 01 ff ff ff ff ff ff 5c 1e
[ 11 ] (
[ 3 ] (
[ 6 ] (
[ 0 ] (
[ 1 ] 01
[ 2 ] 14
[ 3 ] 01
[ 4 ] 05
[ 5 ] aa 00 04 00 de 11 a0 aa f9 6f 56 de 8e 00 05 00 01 01 61 00
00
)
)
)
)
[ 12 ] (
)
)
)
AES DUMP of ENTITY OUT:
depth=4 class code= 10 instance = �class code= 11 instance = no curlen class code= 12 instance = no curlen class code= 13 instance = a
HANDLE STATE, on return: FIRST
CVR returned:
%MCC-S-COMMON_EXCEPTIO, success with common exception reply
HANDLE STATE, at check_handle: 0
Node DEC:.a Storage VMS File a
AT 22-SEP-1990 15:51:36
The requested operation cannot be completed
%MCC-I-REQ_NOT_SATIS, request not satisfied
| T.R | Title | User | Personal Name | Date | Lines |
|---|---|---|---|---|---|
| 346.1 | INFO: Needed another level | COOKIE::KITTELL | Richard - Architected Info Mgmt | Mon Sep 24 1990 22:56 | 112 |
After looking at the ILV produced by other MMs it looked like there needed
to be another level with an id of 0 between the exception code and the
argument code.
That was easy enough, and now FCL correctly extracts the CVR from the
MCCReply fields and reports the right error:
The requested operation cannot be completed
%MCC-E-NOENTITY, no corresponding entity instance exists
I'm pretty sure I've seen FCL format the MCC Service Error Argument, which
in this case would display the entity whose absence caused the problem. If
only I could remember what error to which directive and entity I saw it
on, I could look at the ILV and revengr it. But I can't.
Can anyone give me some hints towards getting the PM to display the
contents of MCCReply?
For you ILV savants, here's the latest:
DECmcc (X1.1.0)
FCL PM Arguments before call_function:
AES DUMP of ENTITY IN:
depth=4 class code= 10 instance = �class code= 11 instance = no curlen class code= 12 instance = no curlen class code= 13 instance = a
ILV DUMP of INP:
[ 0 ] (
[ 1 ] aa 00 04 00 de 11 a0 aa f9 6f 56 de 8e 00 05 00 01 01 61 00
00
)
ILV DUMP of INQ: in_q is NULL
ATTRIBUTE PARTITION: 10
HANDLE STATE, before call: FIRST
*******************************************
FCL PM Arguments on return from call_function:
ILV DUMP of OUTP:
[ 2 ] (
[ 0 ] (
[ 4 ] (
[ 1 ] 01
[ 2 ] 58 02 00 00
[ 3 ] 03 26 80 59
[ 4 ] 0c
[ 5 ] (
[ 0 ] (
[ 1 ] 01
[ 2 ] 14
[ 3 ] 01
[ 4 ] 05
[ 5 ] aa 00 04 00 de 11 a0 aa f9 6f 56 de 8e 00 05 00 01 01 61 00
00
)
[ 1 ] (
[ 1 ] 01
[ 2 ] 01
[ 3 ] 15
[ 4 ] 04
[ 5 ] 01 17 32 34 2d 53 45 50 2d 31 39 39 30 20 32 30 3a 34 30 3a
32 36 2e 30 33
)
)
[ 6 ] 0a
[ 7 ] (
)
[ 8 ] (
)
[ 9 ] (
)
[ 10 ] c0 d8 bc 5e 0b 5c c9 01 ff ff ff ff ff ff 5c 1e
[ 11 ] (
[ 3 ] (
[ 6 ] (
[ 0 ] (
[ 1 ] 01
[ 2 ] 14
[ 3 ] 01
[ 4 ] 05
[ 5 ] aa 00 04 00 de 11 a0 aa f9 6f 56 de 8e 00 05 00 01 01 61 00
00
)
)
)
)
[ 12 ] (
)
)
)
)
AES DUMP of ENTITY OUT:
depth=4 class code= 10 instance = �class code= 11 instance = no curlen class code= 12 instance = no curlen class code= 13 instance = a
HANDLE STATE, on return: FIRST
CVR returned:
%MCC-S-COMMON_EXCEPTIO, success with common exception reply
HANDLE STATE, at check_handle: 0
Node DEC:.a Storage VMS File a
AT 24-SEP-1990 20:40:26
The requested operation cannot be completed
%MCC-E-NOENTITY, no corresponding entity instance exists
| |||||
| 346.2 | MKNME::DANIELE | Tue Sep 25 1990 08:22 | 58 | ||
Does this help?
MCC> register snmp ffff
FCL PM Arguments before call_function:
AES DUMP of ENTITY IN:
depth=1 class code= 18 instance = ffff
ILV DUMP of INP: in_p is NULL
ILV DUMP of INQ: in_q is NULL
ATTRIBUTE PARTITION: 10
*******************************************
FCL PM Arguments on return from call_function:
ILV DUMP of OUTP:
[ 19 ] (
[ 4 ] (
[ 1 ] 03 26 80 59
[ 2 ] 01
[ 3 ] (
[ 0 ] (
[ 1 ] 01
[ 2 ] 12
[ 3 ] 62 -- b
[ 4 ] 4a -- J
[ 5 ] 66 66 66 66 -- ffff
)
)
[ 4 ] (
[ 3 ] (
[ 6 ] (
[ 0 ] (
[ 1 ] 01
[ 2 ] 12
[ 3 ] 62 -- b
[ 4 ] 4a -- J
[ 5 ] 66 66 66 66 -- ffff
)
)
)
)
)
)
AES DUMP of ENTITY OUT:
depth=1 class code= 18 instance = ffff
CVR returned:
%MCC-S-COMMON_EXCEPTIO, success with common exception reply
SNMP ffff
AT 25-SEP-1990 08:21:15
The requested operation cannot be completed
MCC Service Error = No such entity: SNMP ffff
MCC>
| |||||
| 346.3 | <here's one> | TOOK::HAO | Tue Sep 25 1990 09:00 | 132 | |
Sorry Mike. Your example was for an MCCMessage datatype, not MCCReply.
Richard, I'm not sure if the extra level is needed. The following is
an ILV dump of the command that returns a hard-coded MCCReply argument.
This is for the PM_TESTER module which is used to test datatype
conversion routines.
The response ID is 1. Two arguments are returned, of which Argument
ID 6 is the one with MCCReply datatype:
POLE$ mana/enter
DECmcc (X1.1.0)
MCC> dump mcc 0 pm_tester mccreplyarg
FCL PM Arguments before call_function:
AES DUMP of ENTITY IN:
depth=2 class code= 7 instance = 0 class code= 11 instance = no curlen
ILV DUMP of INP:
[ 0 ] (
[ 6 ] (
[ 5 ]
)
)
ILV DUMP of INQ: in_q is NULL
ATTRIBUTE PARTITION: 10
*******************************************
FCL PM Arguments on return from call_function:
ILV DUMP of OUTP:
[ 1 ] (
[ 100 ] 01 0b 4d 43 43 52 65 70 6c 79 41 72 67
[ 6 ] (
[ 1 ] 0b
[ 2 ] 78 00 08 00
[ 3 ] 03 26 80 49
[ 4 ] 03
[ 5 ] (
[ 0 ] (
[ 1 ] 01
[ 2 ] 07
[ 3 ] 00
[ 4 ] 00
[ 5 ]
)
[ 1 ] (
[ 1 ] 01
[ 2 ] 0b
[ 3 ] 00
[ 4 ] 00
[ 5 ]
)
)
[ 6 ] 0a
[ 7 ] (
[ 222 ] (
[ 6 ] 6e 61 6d 65 -- name
)
)
[ 8 ] (
[ 3 ] (
[ 1 ] 01
[ 4 ] 08 ae
[ 16 ] 73 74 72 69 6e 67 -- string
)
)
[ 9 ] (
[ 0 ] (
[ 1 ] 01
[ 2 ] 07
[ 3 ] 00
[ 4 ] 00
[ 5 ]
)
[ 1 ] (
[ 1 ] 01
[ 2 ] 0b
[ 3 ] 00
[ 4 ] 00
[ 5 ]
)
)
[ 10 ] 10 00 0e 02 cc e3 16 00 10 00 00 01 00 00 00 00
[ 11 ] (
[ 1 ] (
[ 1 ] 01
[ 4 ] 08 ae
)
)
[ 12 ] (
[ 0 ] (
)
)
)
)
AES DUMP of ENTITY OUT:
depth=2 class code= 7 instance = 0 class code= 11 instance = no curlen
CVR returned:
%MCC-S-RESPONSE, success with response reply
MCC 0 PM_TESTER
AT 25-SEP-1990 08:54:25
Dump of MCCReplyArg Successful
MCCReplyArg = 11, X0.8.0,
%MCC-S-RESPONSE, success with
response reply,
Test,
MCC PM_TESTER ,
Null Partition,
BooleanArg = True,
Unsigned32Arg = 2222,
Latin1StringArg = "string",
MCC PM_TESTER ,
Test Successful,
BooleanArg = True,
Unsigned32Arg = 2222
MCC>
*************************************
Christine
| |||||
| 346.4 | SOLUTION: No Null Pointers | COOKIE::KITTELL | Richard - Architected Info Mgmt | Wed Sep 26 1990 01:45 | 5 |
Thanks, Christine. The trick is to not have any null pointers in the MCCReply structure. Even if in_p is null, the field in the reply list has to point at a valid descriptor for a null ILV buffer. If there isn't an out_entity, set the field to in_entity. | |||||