Integrating Jeff's 3.12 CA server

This commit is contained in:
Matt Needes
1994-07-13 19:54:15 +00:00
parent 822825ddb4
commit 4178bc0248
6 changed files with 17 additions and 102 deletions

View File

@@ -46,10 +46,11 @@
* .12 joh 090893 converted pointer to server id
* .13 joh 091493 made events on action a subroutine for debugging
* .14 joh 020194 New command added for CAV4.1 - client name
* .15 joh 052594 Removed IOC_BUILD cmd
*/
static char *sccsId = "$Id$";
static char *sccsId = "%W% %G%";
#include <assert.h>
#include <string.h>
@@ -93,7 +94,7 @@ struct extmsg *mp,
struct client *client
);
LOCAL void build_reply(
LOCAL void search_reply(
struct extmsg *mp,
struct client *client
);
@@ -304,8 +305,7 @@ struct message_buffer *recv
break;
}
case IOC_SEARCH:
case IOC_BUILD:
build_reply(mp, client);
search_reply(mp, client);
break;
case IOC_WRITE_NOTIFY:
@@ -1326,8 +1326,7 @@ db_field_log *pfl
*/
v41 = CA_V41(CA_PROTOCOL_VERSION,client->minor_version_number);
if(!asCheckGet(pciu->asClientPVT)){
if(reply->m_cmmd==IOC_READ||
reply->m_cmmd==IOC_READ_BUILD){
if(reply->m_cmmd==IOC_READ){
if(v41){
status = ECA_NORDACCESS;
}
@@ -1362,9 +1361,9 @@ db_field_log *pfl
/*
* I cant wait to redesign this protocol from scratch!
*/
if(!v41||reply->m_cmmd==IOC_READ||reply->m_cmmd==IOC_READ_BUILD){
if(!v41||reply->m_cmmd==IOC_READ){
/*
* old client & plain get & search/get
* old client & plain get
* continue to return an exception
* on failure
*/
@@ -1398,12 +1397,10 @@ db_field_log *pfl
* The m_cid field in the protocol
* header is abused to carry the status
*
* get &search/get calls still use the
* get calls still use the
* m_cid field to identify the channel.
*/
if( v41&&
reply->m_cmmd!=IOC_READ&&
reply->m_cmmd!=IOC_READ_BUILD ){
if( v41 && reply->m_cmmd!=IOC_READ){
reply->m_cid = ECA_NORMAL;
}
@@ -1527,11 +1524,11 @@ struct client *client
/*
*
* build_reply()
* search_reply()
*
*
*/
LOCAL void build_reply(
LOCAL void search_reply(
struct extmsg *mp,
struct client *client
)
@@ -1557,7 +1554,7 @@ struct client *client
/* Exit quickly if channel not on this node */
status = db_name_to_addr(
mp->m_cmmd == IOC_BUILD ? mp + 2 : mp + 1,
mp + 1,
&tmp_addr);
if (status < 0) {
if (CASDEBUG > 2)
@@ -1594,27 +1591,6 @@ struct client *client
pchannel->client = client;
pchannel->cid = mp->m_cid;
/*
* Existing build() interface to the client does not provide mechanism
* to inform them that the channel connected but the value
* couldnt be fetched so search/get combined op
* to no read access channel not allowed.
*/
#if 0
if (mp->m_cmmd == IOC_BUILD && !asCheckGet(pchannel->asClientPVT)) {
#else
if (mp->m_cmmd == IOC_BUILD) {
printf("Build access security bypassed\n");
#endif
SEND_LOCK(client);
send_err(mp, ECA_NORDACCESS, client, RECORD_NAME(&tmp_addr));
SEND_UNLOCK(client);
FASTLOCK(&rsrv_free_addrq_lck);
ellAdd(&rsrv_free_addrq, &pchannel->node);
FASTUNLOCK(&rsrv_free_addrq_lck);
return;
}
/*
* allocate a server id and enter the channel pointer
* in the table
@@ -1634,67 +1610,8 @@ printf("Build access security bypassed\n");
return;
}
/*
* UDP reliability schemes rely on both msgs in same reply Therefore
* the send buffer locked while both messages are placed
*/
SEND_LOCK(client);
if (mp->m_cmmd == IOC_BUILD) {
short type = (mp + 1)->m_type;
unsigned int count = (mp + 1)->m_count;
unsigned int size;
/*
* must be large enough to hold both the search and the build-get
* reply in one UDP message. Hence the extra sizeof(*mp) added
* in below.
*/
size = sizeof(*mp) + /* search reply hdr size */
sizeof(*pMinorVersion) +/* version id after search hdr */
sizeof(*mp) + /* build get reply hdr size */
+ dbr_size_n(type, count);/* size of the structure fetched */
get_reply = (struct extmsg *) ALLOC_MSG(client, size);
if (!get_reply) {
/* tell them that their request is to large */
send_err(mp, ECA_TOLARGE, client, RECORD_NAME(&tmp_addr));
SEND_UNLOCK(client);
FASTLOCK(&rsrv_free_addrq_lck);
bucketRemoveItem(
pCaBucket,
pchannel->sid,
pchannel);
ellAdd(&rsrv_free_addrq, &pchannel->node);
FASTUNLOCK(&rsrv_free_addrq_lck);
return;
} else {
struct event_ext evext;
evext.pciu = pchannel;
evext.msg = *(mp+1);
/*
* this allows extra build replies
* to be dicarded
*/
evext.msg.m_cmmd = IOC_READ_BUILD;
evext.msg.m_cid = sid;
evext.send_lock = FALSE;
evext.size = dbr_size_n(type, count);
evext.pdbev = NULL;
evext.get = TRUE;
/*
* Arguments to this routine organized in favor of
* the standard db event calling mechanism-
* routine(userarg, paddr). See events added above.
* Hold argument set true so the send message buffer
* is not flushed once each call.
*/
read_reply(&evext, &tmp_addr, TRUE, NULL);
}
}
search_reply = (struct extmsg *)
ALLOC_MSG(client, sizeof(*pMinorVersion));
if (!search_reply)
@@ -1724,7 +1641,6 @@ printf("Build access security bypassed\n");
ellAdd(&client->addrq, &pchannel->node);
FASTUNLOCK(&client->addrqLock);
return;
}
@@ -1822,7 +1738,6 @@ char *pformat,
case IOC_READ:
case IOC_READ_NOTIFY:
case IOC_SEARCH:
case IOC_BUILD:
case IOC_WRITE:
case IOC_WRITE_NOTIFY:
/*

View File

@@ -35,7 +35,7 @@
* .06 joh 031992 improved diagnostics
*/
static char *sccsId = "$Id$";
static char *sccsId = "@(#)caserverio.c 1.18 5/6/94";
#include <string.h>
#include <errno.h>

View File

@@ -44,7 +44,7 @@
* .12 joh 020494 identifies the client in client_stat
*/
static char *sccsId = "$Id$";
static char *sccsId = "@(#)caservertask.c 1.22 5/6/94";
#include <stdio.h>
#include <assert.h>
#include <unistd.h>

View File

@@ -56,7 +56,7 @@
* pend which could lock up the cast server.
*/
static char *sccsId = "$Id$";
static char *sccsId = "@(#)cast_server.c 1.24 5/6/94";
#include <assert.h>
#include <string.h>

View File

@@ -33,7 +33,7 @@
* .00 joh 021192 better diagnostics
*/
static char *sccsId = "$Id$\t$Date$";
static char *sccsId = "@(#)online_notify.c 1.14\t5/6/94";
/*
* ansi includes

View File

@@ -43,7 +43,7 @@
#ifndef INCLserverh
#define INCLserverh
static char *serverhSccsId = "$Id$";
static char *serverhSccsId = "@(#)server.h 1.19 5/6/94";
#include <vxLib.h>
#include <ellLib.h>