I will check this stuff in this coming Friday, 4 Oct,
( at midnight, in the last timezone on Earth...)
if I don't hear any objections / suggestions,
so please take a look before then if you would like to
provide feedback.



These are expanded descriptions that I'd like to add to the C API
documentation.  ( These are the descriptions only -- where the
current info already explains the parameters and returns values
I will just leave those in place. )


These are the only ones I plan to change at this time.




Please take a look to see

  1. whether the description matches your understanding
     of what the functions do, and how they fit together.


  2. whether you, as a developer using this code, would
     find the description useful, sufficient, understandable,
     etc.


Question 2 is still very valuable even if you have no
idea about Question 1.



This is not yet a complete list.  Some of the functions are
clear already, and some I have no clue about as yet.



Here they are:




pn_messenger_accept
{
  Signal the sender that you have received and have acted on the message
  pointed to by the tracker.  If the PN_CUMULATIVE flag is set, all
  messages prior to the tracker will also be accepted, back to the
  beginning of your incoming window.
}



pn_messenger_errno
{
  Return the code for the most recent error.
  Initialized to zero at messenger creation.
  Error numbers are "sticky" i.e. are not reset to 0
  at the end of successful API calls.

  (NOTE! This is the only description that is intentionally false.
   There *is* one API call that resets errno to 0 -- but I think
   it shouldn't, and I will complain about it Real Soon Now.)
}



pn_messenger_error
{
  Return a text description of the most recent error.
  Initialized to null at messenger creation.
  Error text is "sticky" i.e. not reset to null
  at the end of successful API calls.
}



pn_messenger_get
{
  Pop the oldest message off your incoming message queue,
  and copy it into the given message structure.
  If the given pointer to a message structure in NULL,
  the popped message is discarded.
  Returns PN_EOS if there are no messages to get.
  Returns an error code only if there is a problem in
  decoding the message.
}




pn_messenger_get_certificate
{
  Return the certificate path if one has been set,
  by pn_messenger_set_certificate, or null.
}



pn_messenger_get_incoming_window
{
  Returns the size of the incoming window that was
  set with pn_messenger_set_incoming_window.  The
  default is 0.
}


pn_messenger_get_outgoing_window
{
  Returns the size of the incoming window that was
  set with pn_messenger_set_incoming_window.  The
  default is 0.
}



pn_messenger_incoming_subscription
{
  Returns a pointer to the subscription of the message returned by the
  most recent call to pn_messenger_get(), or NULL if pn_messenger_get()
  has never been called.
}



pn_messenger_incoming_tracker
{
  Returns a tracker for the message most recently fetched by
  pn_messenger_get().  The tracker allows you to accept or reject its
  message, or its message plus all prior messages that are still within
  your incoming window.
}



pn_messenger_interrupt
{
  Call this from a non-messenger thread to interrupt
  a messenger that is blocking.
  Return value:  0 if all is well, or -1.
  If -1 is returned, that is not PN_EOS.  It is the return
  value of the system call write(3), and can be printed with
  perror(3).
}



pn_messenger_is_blocking
{
  Accessor for messenger blocking mode.
  Note: this tells you only whether the messenger is in
  blocking mode.  This will not tell you (if called from
  a separate thread) that a messenger is currently blocking
}




pn_messenger_outgoing_tracker
{
  Returns a tracker for the outgoing message most recently given
  to pn_messenger_put.  Use this tracker with pn_messenger_status
  to determine the delivery status of the message, as long as the
  message is still within your outgoing window.
}



pn_messenger_put
{
  Puts the message onto the messenger's outgoing queue.
  The message may also be sent if transmission would not cause
  blocking.  This call will not block.
}



pn_messenger_receiving
{
  Returns the number of messages that
  was requested by the most recent call
  to pn_messenger_recv.
}


pn_messenger_recv
{
  ( add this text to current description )
  After receiving messages onto your incoming queue,
  use pn_messenger_get to bring messages into your application code.
}



pn_messenger_reject
{
  Rejects the message indicated by the tracker.  If the PN_CUMULATIVE
  flag is used this call will also reject all prior messages that
  have not already been settled.  The semantics of message rejection
  are application-specific.  If messages represent work requests,
  then rejection would leave the sender free to try another receiver,
  without fear of having the same task done twice.
}



pn_messenger_rewrite
{
  Similar to pn_messenger_route(), except that the destination of
  the message is determined before the message address is rewritten.
  If a message has an outgoing address of "amqp://0.0.0.0:5678", and a
  rewriting rule that changes its outgoing address to "foo", it will still
  arrive at the peer that is listening on "amqp://0.0.0.0:5678", but when
  it arrives there, its outgoing address will have been changed to "foo".
}



pn_messenger_send
{
  If blocking has been set with pn_messenger_set_blocking, this call
  will block until n messages have been sent.  A value of -1 for n means
  "all messages in the outgoing queue".

  In addition, if a nonzero size has been set for the outgoing window,
  this call will block until all messages within that window have
  been received.  Any blocking will end upon timeout, if one has been
  set by pn_messenger_timeout.

  If blocking has not been set, this call will stop transmitting
  messages when further transmission would require blocking, or when
  the outgoing queue is empty, or when n messages have been sent.
}



pn_messenger_set_blocking
{
  Enable or disable blocking behavior during calls to
  pn_messenger_send and pn_messenger_recv.
}




pn_messenger_set_certificate
{
  Sets the path that will be used to get the certificate
  that will be used to identify this messenger to its
  peers.  The validity of the path is not checked by
  this function.
}



pn_messenger_set_incoming_window
{
  The size of your incoming window limits the number of messages
  that can be accepted or rejected using trackers.  Messages do
  not enter this window when they have been received (pn_messenger_recv)
  onto you incoming queue.  Messages enter this window only when you
  take them into your application using pn_messenger_get.
  If your incoming window size is N, and you get N+1 messages without
  explicitly accepting or rejecting the oldest message, then it will be
  implicitly accepted when it falls off the edge of the incoming window.
}



pn_messenger_set_outgoing_window
{
  The size of your outgoing window limits the number of messages whose
  status you can check on using a tracker, and pn_messenger_status.
  Messages do not enter this window when they are placed on your outgoing
  queue They enter it only when they have been transmitted to the sender.
  If you requested a tracker for an outgoing message, and if it is still
  within this window, you can find the current delivery status of the
  message using pn_messenger_status.
}



pn_messenger_set_timeout
{
  Set timeout, in milliseconds, that will interrupt blocking calls.
}



pn_messenger_start
{
  Currently a no-op placeholder.
  For future compatibility, do not send or receive messages
  before starting the messenger.
}



pn_messenger_status
{
  Find the current delivery status of the outgoing message
  associated with this tracker, as long as the message is still
  within your outgoing window.
}



pn_messenger_stop
{
  Stops a messenger.  A messenger cannot send or
  receive messages after it is stopped.  The messenger may require
  some time to stop if it is busy, and in that case will return
  PN_IN_PROGRESS.  In that case, call pn_messenger_stopped() to see
  if it has fully stopped.
}



pn_messenger_stopped
{
  If a call to pn_messenger_stop returns a non-zero code,
  use this to determine whether the messenger has stopped.
}


Reply via email to