On Mar 17, 2005, at 1:21 PM, Patrick Welche wrote:

On Wed, Mar 16, 2005 at 04:04:48PM -0500, Patrick Radtke wrote:
I'll add a little code sample

// server returns NO on an error
imclient_addcallback(imclient, "NO",
                       CALLBACK_NOLITERAL,
                       callback_error,
                       &error_string,
                       NULL);

 nc =1;
  imclient_send(imclient,end_command,(void*) &nc,"create
\"user/bigtestuser3\"");
 while(nc > 0) {
    imclient_processoneevent(imclient);
      }
cout << "create data is " << error_string << endl;


So bigtestuser3 already exists. So I would expect the imap server to return 'NO Mailbox already exists'. So I add a callback on the keyword 'NO', but it never gets called. Are there other settings I need to use on the callback?

Just experimenting, you could try CALLBACK_NUMBERED instead of CALLBACK_NOLITERAL, or just NULL, and you could even use "" instead of "NO" at least to start by catching all responses..

Cheers,

Patrick


I tried various combinations of CALLBACK_NUMBERED, NULL, "" and NO and did not have any luck.


I tried making things as simple as possible.

static void callback_generic(struct imclient *imclient,
                           void *rock,
                           struct imclient_reply *reply) {
  cout << "in gerneric callback " << endl;
  cout << "\tKeyword: " << reply->keyword << endl
       << "\tMsgno: " << reply->msgno << endl
       << "\tText: " << reply->text << endl << endl;

}


then in main

 imclient_addcallback(imclient,
                       "",            /*also tried NO */
                       NULL,   /*also tried  CALLBACK_NUMBERED*/
                       callback_generic,
                       &msg_string,
                       NULL);


nc =1;
imclient_send(imclient,end_command,(void*) &nc,"create \"user/bigtestuser10\"");


  while(nc > 0) {
    imclient_processoneevent(imclient);
  }


and I've tried both setting and not setting (my server supports LITERAL+)
imclient_setflags(imclient, IMCLIENT_CONN_NONSYNCLITERAL);



Is there some other step that must be performed? Things like getquota, getacl work fine.

From reading through 'man imclient' and the Imap V4 rev 1 RFC, it appears that imclient_addcallback is only good for untagged data response from the server.
While the response I am trying to detect (OK, NO) is a tagged response. Does anyone know how to process a tagged response with imclient?


-Patrick

---
Cyrus Home Page: http://asg.web.cmu.edu/cyrus
Cyrus Wiki/FAQ: http://cyruswiki.andrew.cmu.edu
List Archives/Info: http://asg.web.cmu.edu/cyrus/mailing-list.html

Reply via email to