Sous-routine srcsrpy

Objectif

Renvoie une réponse à une demande du contrôleur de ressources système (SRC) au processus client.

Bibliothèque

System Resource Controller Library (libsrc.a)

Syntaxe

#include <spc.h>
int srcsrpy ( SRChdr,  PPacket,  PPacketSize,  Continued)
struct srchdr *SRChdr;
char *PPacket;
int PPacketSize;
ushort Continued;

Descriptif

La sous-routine srcsrpy renvoie une réponse de sous-système à une demande de sous-système du contrôleur de ressources système (SRC). Le format et le contenu de la réponse sont déterminés par le sous-système et le demandeur, mais ils doivent commencer par une structure srchdr . Cette structure et toutes les autres requises pour la communication du sous-système avec le code SRC sont définies dans le fichier /usr/include/spc.h . Le sous-système doit répondre avec un format et un contenu prédéfinis pour les demandes suivantes: START, STOP, STATUS, REFRESH, et TRACE. Les demandes START, STOP, REFRESHet TRACE doivent recevoir une réponse avec une structure srcrep . La demande STATUS doit recevoir une réponse sous la forme d'une structure statbuf .

Remarque: La sous-routine srcsrpy crée son propre socket pour envoyer les paquets de réponse du sous-système.

Paramètres

Article Descriptif
SRChdr Pointe vers la mémoire tampon d'adresse de réponse renvoyée par la sous-routine srcrrqs .
Paquet Pointe vers le paquet de réponse. Le premier élément du paquet de réponse est une structure srchdr . :NONE.contL'élément de la structure PPacket->srchdr est modifié lors du renvoi à partir de la sous-routine srcsrpy . Le deuxième élément du paquet de réponse doit être une structure svrreply , un tableau de structures statcode ou un autre format accepté par le sous-système et le demandeur.
PPacketSize Indique le nombre d'octets du paquet de réponse désigné par le paramètre PPacket . Le paramètre PPacketSize peut être la taille d'un shortou être compris entre la taille d'une structure srchdr et la valeur SRCPKTMAX , qui est définie dans le fichier spc.h .
Continué Indique si cette réponse doit être poursuivie. Si le paramètre Suite est défini sur la constante END, aucun autre paquet de réponse n'est envoyé pour cette demande. Si le paramètre Suite est défini sur CONTINUATION, le deuxième élément de ce qui est indiqué par le paramètre PPacket doit être une structure svrreply , carrtnmsgL'élément de la structure svrreply est imprimé dans la sortie standard. Pour une réponse de statut, le paramètre Suite est défini sur STATCONTINUÉet le deuxième élément de ce qui est désigné par le paramètre PPacket doit être un tableau de structures statcode . Si une demande de sous-système STOP est reçue, un seul paquet de réponse peut être envoyé et le paramètre Suite doit être défini sur END. Les autres types de continuations, déterminés par le sous-système et le demandeur, doivent être définis à l'aide de valeurs positives pour le paramètre Suite . Des valeurs autres que les suivantes doivent être utilisées:
0
end
1
Suite
2
STATCONTINUATION

Valeurs renvoyées

Si la sous-routine srcsrpy aboutit, elle renvoie la valeur SRC_OK.

Codes d'erreur

La sous-routine srcsrpy échoue si l'une des conditions suivantes ou les deux conditions suivantes sont remplies:

Article Descriptif
SRC_SOCK Un incident s'est produit au niveau des communications de socket SRC.
SRC_REPLYSZ La taille de réponse SRC n'est pas valide.

Exemples

  1. Pour envoyer une réponse de sous-système STOP , entrez:
    struct srcrep return_packet;
    struct srchdr *srchdr;
     
    bzero(&return_packet,sizeof(return_packet));
    return_packet.svrreply.rtncode=SRC_OK;
    strcpy(return_packet.svrreply,"srctest");
     
    srcsrpy(srchdr,return_packet,sizeof(return_packet),END);

    Cette entrée envoie un message indiquant que le sous-systèmesrctestest en cours d'arrêt.

  2. Pour envoyer une réponse de sous-serveur START , entrez:
    struct srcrep return_packet;
    struct srchdr *srchdr;
     
    bzero(&return_packet,sizeof(return_packet));
    return_packet.svrreply.rtncode=SRC_SUBMSG;
    strcpy(return_packet.svrreply,objname,"mysubserver");
    strcpy(return_packet.svrreply,objtext,"The subserver,\
    mysubserver, has been started");
     
    srcsrpy(srchdr,return_packet,sizeof(return_packet),END);

    Le message résultant indique que la demande de démarrage du sous-serveur a abouti.

  3. Pour envoyer une réponse de statut, entrez:
    int rc;
    struct sockaddr addr;
    int addrsz;
    struct srcreq packet;
    struct
    {
       struct srchdr srchdr;
       struct statcode statcode[10];
    } status;
    struct srchdr *srchdr;
    struct srcreq packet;
       .
       .
       .
    /* grab the reply information from the SRC packet */
    srchdr=srcrrqs(&packet);
    bzero(&status.statcode[0].objname,
     
    /* get SRC status header */
    srcstathdr(status.statcode[0].objname,
      status.statcode[0].objtext);
       .
       .
       .
    /* send status packet(s) */
    srcsrpy(srchdr,&status,sizeof(status),STATCONTINUED);
       .
       .
       .
    srcsrpy(srchdr,&status,sizeof(status),STATCONTINUED);
     
    /* send final packet */
    srcsrpy(srchdr,&status,sizeof(struct srchdr),END);
      

    Cette entrée envoie plusieurs paquets de statut.

Fichiers

Article Descriptif
/dev/.SRC-unix Indique l'emplacement des fichiers de socket temporaires.