]> andersk Git - moira.git/blobdiff - lib/mr_ops.c
renamed sms_do_update.c to sms_ops.c
[moira.git] / lib / mr_ops.c
index eed894e3dd25c167cf075e31fa347b117d8e0c28..26239e7bdb63fb284bdf5541cc1d761fc37a1fed 100644 (file)
@@ -3,18 +3,25 @@
  *     $Author$
  *     $Header$
  *
- *     Copyright (C) 1987 by the Massachusetts Institute of Technology
+ *     Copyright (C) 1987, 1989 by the Massachusetts Institute of Technology
+ *     For copying and distribution information, please see the file
+ *     <mit-copyright.h>.
  *     
  *     This routine is part of the client library.  It handles
- * creating a connection to the sms server.
+ *     the protocol operations: invoking an update and getting the
+ *     SMS message of the day.
  */
 
 #ifndef lint
 static char *rcsid_sms_do_update_c = "$Header$";
 #endif lint
 
+#include <mit-copyright.h>
 #include "sms_private.h"
 
+
+/* Invoke a DCM update. */
+
 int sms_do_update()
 {
     int status;
@@ -38,13 +45,56 @@ int sms_do_update()
     return status;
 }
 
-/*
- * Local Variables:
- * mode: c
- * c-indent-level: 4
- * c-continued-statement-offset: 4
- * c-brace-offset: -4
- * c-argdecl-indent: 4
- * c-label-offset: -4
- * End:
+
+/* Get the SMS motd.  This returns an SMS status, and motd will either
+ * point to NULL or the motd in a static buffer.
  */
+
+int sms_motd(motd)
+char **motd;
+{
+    int status;
+    sms_params param_st;
+    struct sms_params *params = NULL;
+    struct sms_params *reply = NULL;
+    static char buffer[1024];
+
+    *motd = NULL;
+    CHECK_CONNECTED;
+    params = &param_st;
+    params->sms_version_no = sending_version_no;
+    params->sms_procno = SMS_MOTD;
+    params->sms_argc = 0;
+    params->sms_argl = NULL;
+    params->sms_argv = NULL;
+       
+    if ((status = sms_do_call(params, &reply)))
+      goto punt;
+
+    while ((status = reply->sms_status) == SMS_MORE_DATA) {
+       if (reply->sms_argc > 0) {
+           strncpy(buffer, reply->sms_argv[0], sizeof(buffer));
+           *motd = buffer;
+       }
+       sms_destroy_reply(reply);
+       reply = NULL;
+
+       initialize_operation(_sms_recv_op, sms_start_recv, &reply,
+                            (int (*)())NULL);
+       queue_operation(_sms_conn, CON_INPUT, _sms_recv_op);
+
+       complete_operation(_sms_recv_op);
+       if (OP_STATUS(_sms_recv_op) != OP_COMPLETE) {
+           sms_disconnect();
+           status = SMS_ABORTED;
+           return(status);
+       }
+    }  
+ punt:
+    sms_destroy_reply(reply);
+    /* for backwards compatability */
+    if (status == SMS_UNKNOWN_PROC)
+      return(0);
+    else
+      return(status);
+}
This page took 0.038568 seconds and 4 git commands to generate.