aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/lib/SM/sm_process.c
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/lib/SM/sm_process.c')
-rw-r--r--nx-X11/lib/SM/sm_process.c889
1 files changed, 0 insertions, 889 deletions
diff --git a/nx-X11/lib/SM/sm_process.c b/nx-X11/lib/SM/sm_process.c
deleted file mode 100644
index ab3ec0ba4..000000000
--- a/nx-X11/lib/SM/sm_process.c
+++ /dev/null
@@ -1,889 +0,0 @@
-/* $Xorg: sm_process.c,v 1.4 2001/02/09 02:03:30 xorgcvs Exp $ */
-
-/*
-
-Copyright 1993, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86$ */
-
-/*
- * Author: Ralph Mor, X Consortium
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/SM/SMlib.h>
-#include "SMlibint.h"
-
-
-/*
- * Check for bad length
- */
-
-#define CHECK_SIZE_MATCH(_iceConn, _majorOp, _minorOp, _expected_len, _actual_len, _severity) \
- if ((((_actual_len) - SIZEOF (iceMsg)) >> 3) != _expected_len) \
- { \
- _IceErrorBadLength (_iceConn, _majorOp, _minorOp, _severity); \
- return; \
- }
-
-#define CHECK_AT_LEAST_SIZE(_iceConn, _majorOp, _minorOp, _expected_len, _actual_len, _severity) \
- if ((((_actual_len) - SIZEOF (iceMsg)) >> 3) > _expected_len) \
- { \
- _IceErrorBadLength (_iceConn, _majorOp, _minorOp, _severity); \
- return; \
- }
-
-#define CHECK_COMPLETE_SIZE(_iceConn, _majorOp, _minorOp, _expected_len, _actual_len, _pStart, _severity) \
- if (((PADDED_BYTES64((_actual_len)) - SIZEOF (iceMsg)) >> 3) \
- != _expected_len) \
- { \
- _IceErrorBadLength (_iceConn, _majorOp, _minorOp, _severity); \
- IceDisposeCompleteMessage (iceConn, _pStart); \
- return; \
- }
-
-
-
-void
-_SmcProcessMessage (iceConn, clientData, opcode,
- length, swap, replyWait, replyReadyRet)
-
-IceConn iceConn;
-IcePointer clientData;
-int opcode;
-unsigned long length;
-Bool swap;
-IceReplyWaitInfo *replyWait;
-Bool *replyReadyRet;
-
-{
- SmcConn smcConn = (SmcConn) clientData;
-
- if (replyWait)
- *replyReadyRet = False;
-
- if (!smcConn->client_id &&
- opcode != SM_RegisterClientReply && opcode != SM_Error)
- {
- _IceReadSkip (iceConn, length << 3);
-
- _IceErrorBadState (iceConn, _SmcOpcode, opcode, IceFatalToProtocol);
- return;
- }
-
- switch (opcode)
- {
- case SM_Error:
- {
- iceErrorMsg *pMsg;
- char *pData;
-
- CHECK_AT_LEAST_SIZE (iceConn, _SmcOpcode, opcode,
- length, SIZEOF (iceErrorMsg), IceFatalToProtocol);
-
- IceReadCompleteMessage (iceConn, SIZEOF (iceErrorMsg),
- iceErrorMsg, pMsg, pData);
-
- if (!IceValidIO (iceConn))
- {
- IceDisposeCompleteMessage (iceConn, pData);
- return;
- }
-
- if (swap)
- {
- pMsg->errorClass = lswaps (pMsg->errorClass);
- pMsg->offendingSequenceNum = lswapl (pMsg->offendingSequenceNum);
- }
-
- if (replyWait &&
- replyWait->minor_opcode_of_request == SM_RegisterClient &&
- pMsg->errorClass == IceBadValue &&
- pMsg->offendingMinorOpcode == SM_RegisterClient &&
- pMsg->offendingSequenceNum == replyWait->sequence_of_request)
- {
- /*
- * For Register Client, the previous ID was bad.
- */
-
- _SmcRegisterClientReply *reply =
- (_SmcRegisterClientReply *) (replyWait->reply);
-
- reply->status = 0;
-
- *replyReadyRet = True;
- }
- else
- {
- (*_SmcErrorHandler) (smcConn, swap,
- pMsg->offendingMinorOpcode,
- pMsg->offendingSequenceNum,
- pMsg->errorClass, pMsg->severity,
- (SmPointer) pData);
- }
-
- IceDisposeCompleteMessage (iceConn, pData);
- break;
- }
-
- case SM_RegisterClientReply:
-
- if (!replyWait ||
- replyWait->minor_opcode_of_request != SM_RegisterClient)
- {
- _IceReadSkip (iceConn, length << 3);
-
- _IceErrorBadState (iceConn, _SmcOpcode,
- SM_RegisterClientReply, IceFatalToProtocol);
- }
- else
- {
- smRegisterClientReplyMsg *pMsg;
- char *pData, *pStart;
- _SmcRegisterClientReply *reply =
- (_SmcRegisterClientReply *) (replyWait->reply);
-
-#if 0 /* No-op */
- CHECK_AT_LEAST_SIZE (iceConn, _SmcOpcode, opcode,
- length, SIZEOF (smRegisterClientReplyMsg), IceFatalToProtocol);
-#endif
-
- IceReadCompleteMessage (iceConn, SIZEOF (smRegisterClientReplyMsg),
- smRegisterClientReplyMsg, pMsg, pStart);
-
- if (!IceValidIO (iceConn))
- {
- IceDisposeCompleteMessage (iceConn, pStart);
- return;
- }
-
- pData = pStart;
-
- SKIP_ARRAY8 (pData, swap); /* client id */
-
- CHECK_COMPLETE_SIZE (iceConn, _SmcOpcode, opcode,
- length, pData - pStart + SIZEOF (smRegisterClientReplyMsg),
- pStart, IceFatalToProtocol);
-
- pData = pStart;
-
- EXTRACT_ARRAY8_AS_STRING (pData, swap, reply->client_id);
-
- reply->status = 1;
- *replyReadyRet = True;
-
- IceDisposeCompleteMessage (iceConn, pStart);
- }
- break;
-
- case SM_SaveYourself:
- {
- smSaveYourselfMsg *pMsg;
- unsigned char errVal;
- int errOffset = -1;
-
- CHECK_SIZE_MATCH (iceConn, _SmcOpcode, opcode,
- length, SIZEOF (smSaveYourselfMsg),
- IceFatalToProtocol);
-
- IceReadMessageHeader (iceConn, SIZEOF (smSaveYourselfMsg),
- smSaveYourselfMsg, pMsg);
-
- if (!IceValidIO (iceConn))
- {
- return;
- }
-
- if (pMsg->saveType != SmSaveGlobal &&
- pMsg->saveType != SmSaveLocal &&
- pMsg->saveType != SmSaveBoth)
- {
- errVal = pMsg->saveType;
- errOffset = 8;
- }
- else if (pMsg->shutdown != 1 && pMsg->shutdown != 0)
- {
- errVal = pMsg->shutdown;
- errOffset = 9;
- }
- else if (pMsg->interactStyle != SmInteractStyleNone &&
- pMsg->interactStyle != SmInteractStyleErrors &&
- pMsg->interactStyle != SmInteractStyleAny)
- {
- errVal = pMsg->interactStyle;
- errOffset = 10;
- }
- else if (pMsg->fast != 1 && pMsg->fast != 0)
- {
- errVal = pMsg->fast;
- errOffset = 11;
- }
-
- if (errOffset >= 0)
- {
- _IceErrorBadValue (iceConn, _SmcOpcode,
- SM_SaveYourself, errOffset, 1, (IcePointer) &errVal);
- }
- else
- {
- (*smcConn->callbacks.save_yourself.callback) (smcConn,
- smcConn->callbacks.save_yourself.client_data,
- pMsg->saveType, pMsg->shutdown,
- pMsg->interactStyle, pMsg->fast);
-
- smcConn->save_yourself_in_progress = True;
-
- if (pMsg->shutdown)
- smcConn->shutdown_in_progress = True;
- }
- break;
- }
-
- case SM_SaveYourselfPhase2:
-
- if (!smcConn->phase2_wait)
- {
- _IceErrorBadState (iceConn, _SmcOpcode,
- SM_SaveYourselfPhase2, IceCanContinue);
- }
- else
- {
- CHECK_SIZE_MATCH (iceConn, _SmcOpcode, opcode,
- length, SIZEOF (smSaveYourselfPhase2Msg),
- IceFatalToProtocol);
-
- (*smcConn->phase2_wait->phase2_proc) (smcConn,
- smcConn->phase2_wait->client_data);
-
- free ((char *) smcConn->phase2_wait);
- smcConn->phase2_wait = NULL;
- }
- break;
-
- case SM_Interact:
-
- if (!smcConn->interact_waits)
- {
- _IceErrorBadState (iceConn, _SmcOpcode,
- SM_Interact, IceCanContinue);
- }
- else
- {
- _SmcInteractWait *next = smcConn->interact_waits->next;
-
- CHECK_SIZE_MATCH (iceConn, _SmcOpcode, opcode,
- length, SIZEOF (smInteractMsg),
- IceFatalToProtocol);
-
- (*smcConn->interact_waits->interact_proc) (smcConn,
- smcConn->interact_waits->client_data);
-
- free ((char *) smcConn->interact_waits);
- smcConn->interact_waits = next;
- }
- break;
-
- case SM_SaveComplete:
-
- if (!smcConn->save_yourself_in_progress)
- {
- _IceErrorBadState (iceConn, _SmcOpcode,
- SM_SaveComplete, IceCanContinue);
- }
- else
- {
- CHECK_SIZE_MATCH (iceConn, _SmcOpcode, opcode,
- length, SIZEOF (smSaveCompleteMsg),
- IceFatalToProtocol);
-
- smcConn->save_yourself_in_progress = False;
-
- (*smcConn->callbacks.save_complete.callback) (smcConn,
- smcConn->callbacks.save_complete.client_data);
- }
- break;
-
- case SM_Die:
-
- CHECK_SIZE_MATCH (iceConn, _SmcOpcode, opcode,
- length, SIZEOF (smDieMsg),
- IceFatalToProtocol);
-
- (*smcConn->callbacks.die.callback) (smcConn,
- smcConn->callbacks.die.client_data);
- break;
-
- case SM_ShutdownCancelled:
-
- if (!smcConn->shutdown_in_progress)
- {
- _IceErrorBadState (iceConn, _SmcOpcode,
- SM_ShutdownCancelled, IceCanContinue);
- }
- else
- {
- CHECK_SIZE_MATCH (iceConn, _SmcOpcode, opcode,
- length, SIZEOF (smShutdownCancelledMsg),
- IceFatalToProtocol);
-
- smcConn->shutdown_in_progress = False;
-
- (*smcConn->callbacks.shutdown_cancelled.callback) (smcConn,
- smcConn->callbacks.shutdown_cancelled.client_data);
- }
- break;
-
- case SM_PropertiesReply:
-
- if (!smcConn->prop_reply_waits)
- {
- _IceReadSkip (iceConn, length << 3);
-
- _IceErrorBadState (iceConn, _SmcOpcode,
- SM_PropertiesReply, IceCanContinue);
- }
- else
- {
- smPropertiesReplyMsg *pMsg;
- char *pData, *pStart;
- int numProps;
- SmProp **props = NULL;
- _SmcPropReplyWait *next;
-
-#if 0 /* No-op */
- CHECK_AT_LEAST_SIZE (iceConn, _SmcOpcode, opcode,
- length, SIZEOF (smPropertiesReplyMsg), IceFatalToProtocol);
-#endif
-
- IceReadCompleteMessage (iceConn, SIZEOF (smPropertiesReplyMsg),
- smPropertiesReplyMsg, pMsg, pStart);
-
- if (!IceValidIO (iceConn))
- {
- IceDisposeCompleteMessage (iceConn, pStart);
- return;
- }
-
- pData = pStart;
-
- SKIP_LISTOF_PROPERTY (pData, swap);
-
- CHECK_COMPLETE_SIZE (iceConn, _SmcOpcode, opcode,
- length, pData - pStart + SIZEOF (smPropertiesReplyMsg),
- pStart, IceFatalToProtocol);
-
- pData = pStart;
-
- EXTRACT_LISTOF_PROPERTY (pData, swap, numProps, props);
-
- next = smcConn->prop_reply_waits->next;
-
- (*smcConn->prop_reply_waits->prop_reply_proc) (smcConn,
- smcConn->prop_reply_waits->client_data, numProps, props);
-
- free ((char *) smcConn->prop_reply_waits);
- smcConn->prop_reply_waits = next;
-
- IceDisposeCompleteMessage (iceConn, pStart);
- }
- break;
-
- default:
- {
- _IceErrorBadMinor (iceConn, _SmcOpcode, opcode, IceCanContinue);
- _IceReadSkip (iceConn, length << 3);
- break;
- }
- }
-}
-
-
-
-void
-_SmsProcessMessage (iceConn, clientData, opcode, length, swap)
-
-IceConn iceConn;
-IcePointer clientData;
-int opcode;
-unsigned long length;
-Bool swap;
-
-{
- SmsConn smsConn = (SmsConn) clientData;
-
- if (!smsConn->client_id &&
- opcode != SM_RegisterClient && opcode != SM_Error)
- {
- _IceReadSkip (iceConn, length << 3);
-
- _IceErrorBadState (iceConn, _SmsOpcode, opcode, IceFatalToProtocol);
-
- return;
- }
-
- switch (opcode)
- {
- case SM_Error:
- {
- iceErrorMsg *pMsg;
- char *pData;
-
- CHECK_AT_LEAST_SIZE (iceConn, _SmsOpcode, opcode,
- length, SIZEOF (iceErrorMsg), IceFatalToProtocol);
-
- IceReadCompleteMessage (iceConn, SIZEOF (iceErrorMsg),
- iceErrorMsg, pMsg, pData);
-
- if (!IceValidIO (iceConn))
- {
- IceDisposeCompleteMessage (iceConn, pData);
- return;
- }
-
- if (swap)
- {
- pMsg->errorClass = lswaps (pMsg->errorClass);
- pMsg->offendingSequenceNum = lswapl (pMsg->offendingSequenceNum);
- }
-
- (*_SmsErrorHandler) (smsConn, swap,
- pMsg->offendingMinorOpcode,
- pMsg->offendingSequenceNum,
- pMsg->errorClass, pMsg->severity,
- (SmPointer) pData);
-
- IceDisposeCompleteMessage (iceConn, pData);
- break;
- }
-
- case SM_RegisterClient:
- {
- smRegisterClientMsg *pMsg;
- char *pData, *pStart;
- char *previousId;
- int idLen;
-
-#if 0 /* No-op */
- CHECK_AT_LEAST_SIZE (iceConn, _SmsOpcode, opcode,
- length, SIZEOF (smRegisterClientMsg), IceFatalToProtocol);
-#endif
-
- IceReadCompleteMessage (iceConn, SIZEOF (smRegisterClientMsg),
- smRegisterClientMsg, pMsg, pStart);
-
- if (!IceValidIO (iceConn))
- {
- IceDisposeCompleteMessage (iceConn, pStart);
- return;
- }
-
- pData = pStart;
-
- SKIP_ARRAY8 (pData, swap); /* previous id */
-
- CHECK_COMPLETE_SIZE (iceConn, _SmsOpcode, opcode,
- length, pData - pStart + SIZEOF (smRegisterClientMsg),
- pStart, IceFatalToProtocol);
-
- pData = pStart;
-
- EXTRACT_ARRAY8 (pData, swap, idLen, previousId);
-
- if (*previousId == '\0')
- {
- free (previousId);
- previousId = NULL;
- }
-
- if (!(*smsConn->callbacks.register_client.callback) (smsConn,
- smsConn->callbacks.register_client.manager_data, previousId))
- {
- /*
- * The previoudId was bad. Generate BadValue error.
- */
-
- _IceErrorBadValue (smsConn->iceConn, _SmsOpcode, SM_RegisterClient,
- 8, ARRAY8_BYTES (idLen), (IcePointer) pStart);
- }
-
- IceDisposeCompleteMessage (iceConn, pStart);
- break;
- }
-
- case SM_InteractRequest:
-
- if (!smsConn->save_yourself_in_progress ||
- smsConn->interaction_allowed == SmInteractStyleNone)
- {
- _IceErrorBadState (iceConn, _SmsOpcode,
- SM_InteractRequest, IceCanContinue);
- }
- else
- {
- smInteractRequestMsg *pMsg;
-
- CHECK_SIZE_MATCH (iceConn, _SmsOpcode, opcode,
- length, SIZEOF (smInteractRequestMsg),
- IceFatalToProtocol);
-
- IceReadSimpleMessage (iceConn, smInteractRequestMsg, pMsg);
-
- if (pMsg->dialogType != SmDialogNormal &&
- pMsg->dialogType != SmDialogError)
- {
- unsigned char errVal = pMsg->dialogType;
-
- _IceErrorBadValue (iceConn, _SmsOpcode,
- SM_InteractRequest, 2, 1, (IcePointer) &errVal);
- }
- else if (pMsg->dialogType == SmDialogNormal &&
- smsConn->interaction_allowed != SmInteractStyleAny)
- {
- _IceErrorBadState (iceConn, _SmsOpcode,
- SM_InteractRequest, IceCanContinue);
- }
- else
- {
- (*smsConn->callbacks.interact_request.callback) (smsConn,
- smsConn->callbacks.interact_request.manager_data,
- pMsg->dialogType);
- }
- }
- break;
-
- case SM_InteractDone:
-
- if (!smsConn->interact_in_progress)
- {
- _IceErrorBadState (iceConn, _SmsOpcode,
- SM_InteractDone, IceCanContinue);
- }
- else
- {
- smInteractDoneMsg *pMsg;
-
- CHECK_SIZE_MATCH (iceConn, _SmsOpcode, opcode,
- length, SIZEOF (smInteractDoneMsg),
- IceFatalToProtocol);
-
- IceReadSimpleMessage (iceConn, smInteractDoneMsg, pMsg);
-
- if (pMsg->cancelShutdown != 1 &&
- pMsg->cancelShutdown != 0)
- {
- unsigned char errVal = pMsg->cancelShutdown;
-
- _IceErrorBadValue (iceConn, _SmsOpcode,
- SM_InteractDone, 2, 1, (IcePointer) &errVal);
- }
- else if (pMsg->cancelShutdown && !smsConn->can_cancel_shutdown)
- {
- _IceErrorBadState (iceConn, _SmsOpcode,
- SM_InteractDone, IceCanContinue);
- }
- else
- {
- smsConn->interact_in_progress = False;
-
- (*smsConn->callbacks.interact_done.callback) (smsConn,
- smsConn->callbacks.interact_done.manager_data,
- pMsg->cancelShutdown);
- }
- }
- break;
-
- case SM_SaveYourselfRequest:
- {
- smSaveYourselfRequestMsg *pMsg;
- unsigned char errVal;
- int errOffset = -1;
-
- CHECK_SIZE_MATCH (iceConn, _SmsOpcode, opcode,
- length, SIZEOF (smSaveYourselfRequestMsg),
- IceFatalToProtocol);
-
- IceReadMessageHeader (iceConn, SIZEOF (smSaveYourselfRequestMsg),
- smSaveYourselfRequestMsg, pMsg);
-
- if (!IceValidIO (iceConn))
- {
- IceDisposeCompleteMessage (iceConn, pMsg);
- return;
- }
-
- if (pMsg->saveType != SmSaveGlobal &&
- pMsg->saveType != SmSaveLocal &&
- pMsg->saveType != SmSaveBoth)
- {
- errVal = pMsg->saveType;
- errOffset = 8;
- }
- else if (pMsg->shutdown != 1 && pMsg->shutdown != 0)
- {
- errVal = pMsg->shutdown;
- errOffset = 9;
- }
- else if (pMsg->interactStyle != SmInteractStyleNone &&
- pMsg->interactStyle != SmInteractStyleErrors &&
- pMsg->interactStyle != SmInteractStyleAny)
- {
- errVal = pMsg->interactStyle;
- errOffset = 10;
- }
- else if (pMsg->fast != 1 && pMsg->fast != 0)
- {
- errVal = pMsg->fast;
- errOffset = 11;
- }
- else if (pMsg->global != 1 && pMsg->global != 0)
- {
- errVal = pMsg->fast;
- errOffset = 11;
- }
-
- if (errOffset >= 0)
- {
- _IceErrorBadValue (iceConn, _SmsOpcode,
- SM_SaveYourselfRequest, errOffset, 1, (IcePointer) &errVal);
- }
- else
- {
- (*smsConn->callbacks.save_yourself_request.callback) (smsConn,
- smsConn->callbacks.save_yourself_request.manager_data,
- pMsg->saveType, pMsg->shutdown, pMsg->interactStyle,
- pMsg->fast, pMsg->global);
- }
- break;
- }
-
- case SM_SaveYourselfPhase2Request:
-
- if (!smsConn->save_yourself_in_progress)
- {
- _IceErrorBadState (iceConn, _SmsOpcode,
- SM_SaveYourselfPhase2Request, IceCanContinue);
- }
- else
- {
- CHECK_SIZE_MATCH (iceConn, _SmsOpcode, opcode,
- length, SIZEOF (smSaveYourselfPhase2RequestMsg),
- IceFatalToProtocol);
-
- (*smsConn->callbacks.save_yourself_phase2_request.callback) (
- smsConn, smsConn->callbacks.
- save_yourself_phase2_request.manager_data);
- }
- break;
-
- case SM_SaveYourselfDone:
-
- if (!smsConn->save_yourself_in_progress)
- {
- _IceErrorBadState (iceConn, _SmsOpcode,
- SM_SaveYourselfDone, IceCanContinue);
- }
- else
- {
- smSaveYourselfDoneMsg *pMsg;
-
- CHECK_SIZE_MATCH (iceConn, _SmsOpcode, opcode,
- length, SIZEOF (smSaveYourselfDoneMsg),
- IceFatalToProtocol);
-
- IceReadSimpleMessage (iceConn, smSaveYourselfDoneMsg, pMsg);
-
- if (pMsg->success != 1 && pMsg->success != 0)
- {
- unsigned char errVal = pMsg->success;
-
- _IceErrorBadValue (iceConn, _SmsOpcode,
- SM_SaveYourselfDone, 2, 1, (IcePointer) &errVal);
- }
- else
- {
- smsConn->save_yourself_in_progress = False;
- smsConn->interaction_allowed = SmInteractStyleNone;
-
- (*smsConn->callbacks.save_yourself_done.callback) (smsConn,
- smsConn->callbacks.save_yourself_done.manager_data,
- pMsg->success);
- }
- }
- break;
-
- case SM_CloseConnection:
- {
- smCloseConnectionMsg *pMsg;
- char *pData, *pStart;
- int count, i;
- char **reasonMsgs = NULL;
-
-#if 0 /* No-op */
- CHECK_AT_LEAST_SIZE (iceConn, _SmsOpcode, opcode,
- length, SIZEOF (smCloseConnectionMsg), IceFatalToProtocol);
-#endif
-
- IceReadCompleteMessage (iceConn, SIZEOF (smCloseConnectionMsg),
- smCloseConnectionMsg, pMsg, pStart);
-
- if (!IceValidIO (iceConn))
- {
- IceDisposeCompleteMessage (iceConn, pStart);
- return;
- }
-
- pData = pStart;
-
- EXTRACT_CARD32 (pData, swap, count);
- pData += 4;
-
- for (i = 0; i < count; i++)
- SKIP_ARRAY8 (pData, swap);
-
- CHECK_COMPLETE_SIZE (iceConn, _SmsOpcode, opcode,
- length, pData - pStart + SIZEOF (smCloseConnectionMsg),
- pStart, IceFatalToProtocol);
-
- pData = pStart + 8;
-
- reasonMsgs = (char **) malloc (count * sizeof (char *));
- for (i = 0; i < count; i++)
- EXTRACT_ARRAY8_AS_STRING (pData, swap, reasonMsgs[i]);
-
- IceDisposeCompleteMessage (iceConn, pStart);
-
- (*smsConn->callbacks.close_connection.callback) (smsConn,
- smsConn->callbacks.close_connection.manager_data,
- count, reasonMsgs);
- break;
- }
-
- case SM_SetProperties:
- {
- smSetPropertiesMsg *pMsg;
- char *pData, *pStart;
- SmProp **props = NULL;
- int numProps;
-
-#if 0 /* No-op */
- CHECK_AT_LEAST_SIZE (iceConn, _SmsOpcode, opcode,
- length, SIZEOF (smSetPropertiesMsg), IceFatalToProtocol);
-#endif
-
- IceReadCompleteMessage (iceConn, SIZEOF (smSetPropertiesMsg),
- smSetPropertiesMsg, pMsg, pStart);
-
- if (!IceValidIO (iceConn))
- {
- IceDisposeCompleteMessage (iceConn, pStart);
- return;
- }
-
- pData = pStart;
-
- SKIP_LISTOF_PROPERTY (pData, swap);
-
- CHECK_COMPLETE_SIZE (iceConn, _SmsOpcode, opcode,
- length, pData - pStart + SIZEOF (smSetPropertiesMsg),
- pStart, IceFatalToProtocol);
-
- pData = pStart;
-
- EXTRACT_LISTOF_PROPERTY (pData, swap, numProps, props);
-
- (*smsConn->callbacks.set_properties.callback) (smsConn,
- smsConn->callbacks.set_properties.manager_data, numProps, props);
-
- IceDisposeCompleteMessage (iceConn, pStart);
- break;
- }
-
- case SM_DeleteProperties:
- {
- smDeletePropertiesMsg *pMsg;
- char *pData, *pStart;
- int count, i;
- char **propNames = NULL;
-
-#if 0 /* No-op */
- CHECK_AT_LEAST_SIZE (iceConn, _SmsOpcode, opcode,
- length, SIZEOF (smDeletePropertiesMsg), IceFatalToProtocol);
-#endif
-
- IceReadCompleteMessage (iceConn, SIZEOF (smDeletePropertiesMsg),
- smDeletePropertiesMsg, pMsg, pStart);
-
- if (!IceValidIO (iceConn))
- {
- IceDisposeCompleteMessage (iceConn, pStart);
- return;
- }
-
- pData = pStart;
-
- EXTRACT_CARD32 (pData, swap, count);
- pData += 4;
-
- for (i = 0; i < count; i++)
- SKIP_ARRAY8 (pData, swap); /* prop names */
-
- CHECK_COMPLETE_SIZE (iceConn, _SmsOpcode, opcode,
- length, pData - pStart + SIZEOF (smDeletePropertiesMsg),
- pStart, IceFatalToProtocol);
-
- pData = pStart + 8;
-
- propNames = (char **) malloc (count * sizeof (char *));
- for (i = 0; i < count; i++)
- EXTRACT_ARRAY8_AS_STRING (pData, swap, propNames[i]);
-
- IceDisposeCompleteMessage (iceConn, pStart);
-
- (*smsConn->callbacks.delete_properties.callback) (smsConn,
- smsConn->callbacks.delete_properties.manager_data,
- count, propNames);
-
- break;
- }
-
- case SM_GetProperties:
-
- CHECK_SIZE_MATCH (iceConn, _SmsOpcode, opcode,
- length, SIZEOF (smGetPropertiesMsg),
- IceFatalToProtocol);
-
- (*smsConn->callbacks.get_properties.callback) (smsConn,
- smsConn->callbacks.get_properties.manager_data);
- break;
-
- default:
- {
- _IceErrorBadMinor (iceConn, _SmsOpcode, opcode, IceCanContinue);
- _IceReadSkip (iceConn, length << 3);
- break;
- }
- }
-}