[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference irnbru::ims_api

Title:
Moderator:IRNBRU::MACKENZIE
Created:Wed Jul 10 1991
Last Modified:Tue May 06 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:289
Total number of notes:1527

287.0. "Strange behaviour with nested requests" by OZROCK::HUNTER (Ma Renault est un citron) Tue Mar 25 1997 05:05

I am having some trouble with the transaction import code
of the RI. I have isolated the problem in the following
programme. The nub of it is that when I create a request
within the context of handling an incoming request the
incoming request is no longer valid.

The obvious question is: Is what I (and the RI) doing valid?

Warwick.


Brief Output
------------8<--------------
pkdots.ozy.dec.com> dce_login hunter hunter -e foo1
Put: [Elt;1]
get: IMS error 136020018 SL_NOREQUEST, Request not found

Code
------------8<--------------
#include <stdio.h>
#include <ims_defs.h>

typedef long (*Callback)();

long int foo(char *object_name,  unsigned long *hReq, unsigned long *hResp,
	     void *userData);

SL_T_SERVICE services[] = { "foo", "", (Callback)foo, "foo service" };



main()
{
    unsigned long status;

    status = sl_connect_as_process("wasa", 0, 0);
    if (status != SL_C_NORMAL)
    {
       fprintf(stderr, "connect: IMS error %ld\n", status);
       return status;
    }

    status = sl_main_loop(0, services);
    if (status != SL_C_NORMAL)
    {
       fprintf(stderr, "mainLoop: IMS error %ld\n", status);
    }

    status = sl_disconnect();
    if (status != SL_C_NORMAL)
    {
       fprintf(stderr, "disconnect: IMS error %ld\n", status);
       return status;
    }
}

long int foo(char          *object_name,  
	     unsigned long *hReq, 
	     unsigned long *hResp,
	     void          *userData)
{
    unsigned long status;
    char          eltType[32];
    char          eltValue[32];
    unsigned long eltTypeLen;
    unsigned long eltValueLen;
    unsigned long hReq1;
    int           i;

    /*
    ** Create a request and put an element into it before reading
    ** the data from the request passed in.
    */
    status = sl_create_req(&hReq1);
    if (status != SL_C_NORMAL)
    {
        fprintf(stderr, "create: IMS error %ld\n", status);
	return status;
    }

    status = sl_put_req_elt(&hReq1, "Elt",  0, "1", 0);
    if (status != SL_C_NORMAL)
    {
        fprintf(stderr, "put: IMS error %ld\n", status);
	return status;
    }
    printf("Put: [Elt;1]\n");

    /*
    ** Now try and read the data from the original request.
    */
    while (status == SL_C_NORMAL)
    {
        eltType[0] = '\0';
	eltTypeLen = 0;
	eltValue[0] = '\0';
	eltValueLen = 0;
	status = sl_get_req_elt(&hReq, eltType,  0, eltValue, 0);
	if (status != SL_C_NORMAL)
	{
	    char          text[128];
	    unsigned long textLen;
	    
	    sl_get_error_text(&status, text, &textLen);
	    
	    fprintf(stderr, "get: IMS error %ld %s\n", status, text);
	    return status;
	}
	else
	{
	    printf("Get: [%s;%s]\n", eltType, eltValue);
	}
    }

    return SL_C_NORMAL;
}


Full Output
------------8<--------------
Script started on Tue 25 Mar 12:03:31 1997
csh>  dce_login hunter hunter -e foo1


SL-I-VERSINFO : IMS Version Information V1.32-UDIG/MNS

SL-I-IPTOLERANCE:   = 32000000
SL-I-OPTOLERANCE:   = 32000000
SL-I-MSGSENDSIZE:   = 32000
SL-I-RESENDTIME:    = 1
SL-I-RESENDTRIES:   = 10
SL-I-RECOVERYSTYLE: = 1
SL-I-TAGTRANSLATION = 0
SL-I-TIMESTAMPREQD  = 1
SL-I-MSGCPOMPRESS   = 0
SL-I-AUDITSTATUS:   = 0
SL-I-PRIORITYSTYLE: = 0
SL-I-ACKSTYLE:      = 1
SL-I-TYPE:          = 0
SL-I-WAITSTYLE:     = 1
SL-I-ACK_TIMEOUT:   = 300
SL-I-NAMESPACE:     = M
SL-I-ORGANICSEC     = 
SL-I-AUTOPURGE:     = N
SL-I-LOCNOTFND:- Local translation file not found
SL-I-CONNECT: connected as temporary Q 2967.610
SL-I-CONNECT: checking group cache for name
SL-I-CONNECT: checking name service for name already in use
SL-I-COMMAND: sl_create_msg
SL-I-FINDMSG: look for message handle = 1
SL-I-FINDMSG: message found handle = 1
SL-I-EXITHNDLR: submitting exit handler
SL-I-COMMAND: sl_main_loop
SL-I-COMMAND: sl_wait_req
SL-I-COMMAND: sl_count_pending_req

***********************
*Wait for next Message*
***********************
SL-I-MSGSIZE: Incoming Message Size  = 518
SL-I-DECODE_MESSAGE: decode_msg
IMS-I-DECODE_MESSAGE: decode incoming v11 message
IMS-I-ENDOFMSG: successful end of envelope reached
IMS-I-READ_HEADER_INFO: read message header information
IMS-I-READ_HEADER_INFO: End of header reached
IMS-I-READ_BODY_INFO: start of Body init Body linked list
IMS-I-READ_BODY_PART_INFO: new request
IMS-I-READ_BODY_PART_INFO: read msg info, cont req = false
IMS-I-DECODE: SERVICE_NAME found in Body=[INQUIRE]
IMS-I-READ_BODY_INFO: linkflag = 1
IMS-I-READ_BODY_ITEM_INFO: End of body Item reached
IMS-I-READ_BODY_INFO: End of body reached
IMS-I-REQCONTFLG:request cont flag=[0]
IMS-I-MSGCONTFLG: message cont flag = [0]
IMS-I-ENDOFMSG: successful end of message reached
IMS-I-READ_MESSAGE_INFO: End of message reached
SL-I-MSGHANDLE: message_handle = 3
SL-I-WAITREQ: Organic request received by main loop processing....
SL-I-WAITREQ: Set server_status=0
SL-I-ORGNCHDNLR: organic security file_name = wasa_organic.sec
SL-I-READREQ: msg_item_ptr->seen = 0
SL-I-READREQ: found request seen,handle = [0,1]
SL-I-READREQ: service_name_length = [7]
SL-I-COMMAND: sl_get_req_elt
SL-I-COMMAND: sl_get_req_elt
SL-I-GETREQINT: sl_get_req_elt_internal service_name_LENGTH=[7]
SL-I-GETREQINT: sl_get_req_elt_internal service_name=[INQUIRE]
SL-I-ORGNCHDNLR: compare [ABORT] to [INQUIRE,7]
SL-I-ORGNCHDNLR: compare [EXIT] to [INQUIRE,7]
SL-I-ORGNCHDNLR: compare [INQUIRE] to [INQUIRE,7]
SL-I-ORGNCHDNLR: request_SERVICE = 3
SL-I-ORGNCHDNLR: inquire called
SL-I-COMMAND: sl_create_msg
SL-I-COMMAND: sl_put_msg_elt
SL-I-FINDMSG: look for message handle = 4
SL-I-FINDMSG: message found handle = 4
SL-I-COMMAND: sl_put_msg_elt
SL-I-FINDMSG: look for message handle = 4
SL-I-INQUIRE_SEND :send response to [2967,181]
SL-I-COMMAND: sl_put_msg_elt
SL-I-FINDMSG: look for message handle = 4
SL-I-COMMAND: sl_put_msg_elt
SL-I-FINDMSG: look for message handle = 4
SL-I-COMMAND: sl_put_msg_elt
SL-I-FINDMSG: look for message handle = 4
SL-I-COMMAND: sl_create_req
SL-I-SAVERTSADR: Create request use SOURCE = 0.0 for RTS
SL-I-USEREQID: USE requests last_requestid=1 as RESPONSEID
SL-I-COMMAND: sl_put_req_elt
SL-I-COMMAND: sl_put_req_elt
SL-I-COMMAND: sl_put_req_elt
SL-I-COMMAND: sl_put_req_elt
SL-I-COMMAND: sl_put_req_elt
SL-I-COMMAND: sl_put_req_elt
SL-I-COMMAND: sl_put_req_elt
SL-I-COMMAND: sl_put_req_elt
SL-I-COMMAND: sl_put_req_elt
SL-I-COMMAND: sl_put_req_elt
SL-I-COMMAND: sl_put_req_elt
SL-I-COMMAND: sl_put_req_elt
SL-I-COMMAND: sl_put_req_elt
SL-I-COMMAND: sl_put_req
SL-I-FINDMSG: look for message handle = 4
SL-I-USEMSGID: USE requests last_messageid=5509 as RESPONSEID
SL-I-COMMAND: sl_send_msg
MESSAGE
	ENVELOPE
		ORIGINATOR = ,,2967.610
		SENDER     = ,,0.0
		ADDRESSEE  = ,,2967.181
		PRIORITYSTYLE = 0
		ACKSTYLE      = 1
		RECOVERYSTYLE = 1
		AUTHSTYLE     = 0
		DEFERREDTIME  = 0
	END of ENVELOPE
	HEADER
		DAYANDTIME          = <DEFAULT>
		CLASS               = 51
		TYPE                = 0
		WAITSTYLE           = 1
		TRANSACTIONID       = 0
		RESPONSEID          = 5509
		MESSAGEID           = 2
		REQUESTCONTINUATIONFLAG    = 0
		MESSAGECONTINUATIONFLAG    = 0
		PRECEEDINGMESSAGEID = 0
		NODEPLUSACCOUNT     = PKDOTS.OZY.DEC.COM::HUNTER
	END of HEADER
	BODY
		BODYITEM  - TYPE = 0,LINKFLAG = 0,SERVICE_NAME = [INQUIRE]
			ELEMENT  = [PROCESS_NAME,wasa]
			ELEMENT  = [VERSION,V1.32-UDIG/FNS]
			ELEMENT  = [CLASS,0]
			ELEMENT  = [SERVER_STATUS,0]
			ELEMENT  = [QUEUE_TYPE,T]
			ELEMENT  = [OPERATING_SYSTEM,F]
			ELEMENT  = [SERVICE,wasa]
			ELEMENT  = [SERVICE_STATUS,0]
			ELEMENT  = [AUDIT_STATUS,0]
			ELEMENT  = [ELAPSED_TIME,1]
			ELEMENT  = [CPU_USAGE,1111]
			ELEMENT  = [REQUEST_COUNT,2]
	END of BODY
	TRAILER
	END of TRAILER
END of MESSAGE
SL-I-FINDMSG: look for message handle = 4
SL-I-FINDMSG: look for message handle = 4
IMS-I-ENCODESVCNAME:put service name in Body=[INQUIRE]
MEM-ENCODE_MSG freeing memory for service_name
MEM-ENCODE_MSG freeing memory chunks for body_item_ptr
SL-I-SENDMSG: RecoveryStyle [1] - WaitStyle [1]
SL-I-MSGSIZE: Outgoing Message Size = 835
SL-I-SENDMSG: address name length = 0
SL-I-SENDTOADDRESS = [2967.181]
SL-I-DELIVERYMODE  = 39

****************************************
*SL-I-MSGSENT: message sent STAT1 = 1 *
*SL-I-MSGSENT: psb_status = 1         *
****************************************

SL-I-COMMAND: sl_cancel_msg
SL-I-FINDMSG: look for message handle = 4
SL-I-FINREQINT: No more req in message,free space

***********************
*Wait for next Message*
***********************
SL-I-MSGSIZE: Incoming Message Size  = 458
SL-I-DECODE_MESSAGE: decode_msg
IMS-I-DECODE_MESSAGE: decode incoming v11 message
IMS-I-ENDOFMSG: successful end of envelope reached
IMS-I-READ_HEADER_INFO: read message header information
IMS-I-READ_HEADER_INFO: End of header reached
IMS-I-READ_BODY_INFO: start of Body init Body linked list
IMS-I-READ_BODY_PART_INFO: new request
IMS-I-READ_BODY_PART_INFO: read msg info, cont req = false
IMS-I-DECODE: SERVICE_NAME found in Body=[foo]
IMS-I-READ_BODY_INFO: linkflag = 0
IMS-I-READ_BODY_ITEM_INFO: End of body Item reached
IMS-I-READ_BODY_INFO: End of body reached
IMS-I-REQCONTFLG:request cont flag=[0]
IMS-I-MSGCONTFLG: message cont flag = [0]
IMS-I-ENDOFMSG: successful end of message reached
IMS-I-READ_MESSAGE_INFO: End of message reached
SL-I-MSGHANDLE: message_handle = 4
MESSAGE
	ENVELOPE
		ORIGINATOR = ,,2967.611
		SENDER     = ,,0.0
		ADDRESSEE  = wasa,0.0
		PRIORITYSTYLE = 0
		ACKSTYLE      = 1
		RECOVERYSTYLE = 1
		AUTHSTYLE     = 0
		DEFERREDTIME  = 0
	END of ENVELOPE
	HEADER
		DAYANDTIME          = 1997032512040250
		CLASS               = 1
		TYPE                = 0
		WAITSTYLE           = 2
		TRANSACTIONID       = 0
		RESPONSEID          = 0
		MESSAGEID           = 1
		REQUESTCONTINUATIONFLAG    = 0
		MESSAGECONTINUATIONFLAG    = 0
		PRECEEDINGMESSAGEID = 0
		NODEPLUSACCOUNT     = PKDOTS.OZY.DEC.COM::HUNTER
	END of HEADER
	BODY
		BODYITEM  - TYPE = 0,LINKFLAG = 0,SERVICE_NAME = [foo]
			ELEMENT  = [Element1,a]
			ELEMENT  = [Element2,a]
	END of BODY
	TRAILER
		TRAILER = ,/.:/ims/,2967.611,1997032512040250
	END of TRAILER
END of MESSAGE
SL-I-WAITREQ: Exiting wait. 2 messages received
SL-I-SAVERTSADR: SL_WAIT_REQ: use ORIGINATOR = 2967.611 for RTS
SL-I-COMMAND: sl_get_msg_elt
SL-I-COMMAND: sl_read_req
SL-I-READREQ: rcv_msg_ptr->seen = 0
SL-I-READREQ: found request seen,type = [0,0]
SL-I-COMMAND: sl_create_req
SL-I-SAVERTSADR: Create request use SOURCE = 2967.611 for RTS
SL-I-USEREQID: USE requests last_requestid=3 as RESPONSEID
SL-I-COMMAND: sl_get_req_elt
SL-I-GETREQINT: sl_get_req_elt_internal service_name_LENGTH=[3]
SL-I-GETREQINT: sl_get_req_elt_internal service_name=[foo]
SL-I-COMMAND: sl_create_req
SL-I-SAVERTSADR: Create request use SOURCE = 2967.611 for RTS
SL-I-USEREQID: USE requests last_requestid=3 as RESPONSEID
SL-I-COMMAND: sl_put_req_elt
Put: [Elt;1]
SL-I-COMMAND: sl_get_req_elt
SL-I-COMMAND: sl_get_error_text
get: IMS error 136020018 SL_NOREQUEST, Request not found
SL-I-COMMAND: sl_put_req_elt
SL-I-COMMAND: sl_send_req
SL-I-SENDREQ: called looking for addressee in request
SL-I-ADDRESSNOTFND: Address not found return to sender
SL-I-FINDMSG: look for message handle = 1
SL-I-FINDMSG: message found handle = 4
SL-I-FINDMSG: message found handle = 1
SL-I-FINDMSG: look for message handle = 1
SL-I-COMMAND: sl_put_req
SL-I-FINDMSG: look for message handle = 1
SL-I-USEMSGID: USE requests last_messageid=1 as RESPONSEID
MESSAGE
	ENVELOPE
		ORIGINATOR = ,,2967.610
		SENDER     = ,,0.0
		ADDRESSEE  = ,,2967.611
		PRIORITYSTYLE = 0
		ACKSTYLE      = 1
		RECOVERYSTYLE = 1
		AUTHSTYLE     = 0
		DEFERREDTIME  = 0
	END of ENVELOPE
	HEADER
		DAYANDTIME          = <DEFAULT>
		CLASS               = 0
		TYPE                = 0
		WAITSTYLE           = 1
		TRANSACTIONID       = 0
		RESPONSEID          = 1
		MESSAGEID           = 4
		REQUESTCONTINUATIONFLAG    = 0
		MESSAGECONTINUATIONFLAG    = 0
		PRECEEDINGMESSAGEID = 0
		NODEPLUSACCOUNT     = PKDOTS.OZY.DEC.COM::HUNTER
	END of HEADER
	BODY
		BODYITEM  - TYPE = 0,LINKFLAG = 0
			ELEMENT  = [ERROR_TEXT,Error number 136020018 performing
service foo.]
	END of BODY
	TRAILER
	END of TRAILER
END of MESSAGE
SL-I-FINDMSG: look for message handle = 1
SL-I-FINDMSG: look for message handle = 1
MEM-ENCODE_MSG freeing memory chunks for body_item_ptr
SL-I-SENDMSG: RecoveryStyle [1] - WaitStyle [1]
SL-I-MSGSIZE: Outgoing Message Size = 467
SL-I-SENDMSG: address name length = 0
SL-I-SENDTOADDRESS = [2967.611]
SL-I-DELIVERYMODE  = 39

****************************************
*SL-I-MSGSENT: message sent STAT1 = 1 *
*SL-I-MSGSENT: psb_status = 1         *
****************************************

SL-I-COMMAND: sl_finish_req
SL-I-FINREQ:-No more requests in message, free space
SL-I-COMMAND: sl_wait_req
SL-I-COMMAND: sl_count_pending_req

***********************
*Wait for next Message*
***********************

SL-I-ERRORHNDLR: error handler called
SL-I-UNSENTREQ: unsent request found, handle = [0]
SL-I-ERRORHNDLR: finished error handler

SL-I-EXITHNDLR: exit handler called
SL-I-CLRDNSMAM: clearing address for name [wasa]
SL-I-UNSENTREQ: unsent request found, handle = [5]
csh> ^Dexit

script done on Tue 25 Mar 12:04:08 1997

script done on Tue 25 Mar 12:04:08 1997
T.RTitleUserPersonal
Name
DateLines
287.1try and take the & off of the handle..BEAVER::MCKEATINGTue Mar 25 1997 16:1118
Warwick, what you are trying to do should have no problems, i.e. nested 
requests.

just change the call to the sl_get_req_elt in foo and remove the &

	status = sl_get_req_elt(&hReq, eltType,  0, eltValue, 0);
	if (status != SL_C_NORMAL)

then becomes 

	status = sl_get_req_elt(hReq, eltType,  0, eltValue, 0);
	if (status != SL_C_NORMAL)

this should solve the problem. 

let us know how you get on.

Bob
287.2OZROCK::HUNTERThis is my last RenaultWed Mar 26 1997 02:2714
Thanks Bob,

Can you fix the web page documentation please. The call
to sl_get_req_elt is listed as:

long int sl_get_req_elt(unsigned long           *request_handle,
                        char                    *type,
                        [unsigned long          *type_length],
                        char                    *value,
                        [unsigned long          *value_length]);

Thanks,

Warwick.