Exemplo n.º 1
0
IsoSessionIndication
IsoSession_parseMessage(IsoSession* session, ByteBuffer* message)
{
	uint8_t* buffer = message->buffer;
	uint8_t id;
	uint8_t length;

	if (message->size > 1) {
		id = buffer[0];
		length = buffer[1];
	}
	else
		return SESSION_ERROR;

	switch (id) {
	case 13: /* CONNECT(CN) SPDU */
		if (length != (message->size - 2))
			return SESSION_ERROR;
		if (parseSessionHeaderParameters(session, message, length) == SESSION_OK)
			return SESSION_CONNECT;
		else {
			printf("iso_session.c: error parsing connect spdu\n");
			return SESSION_ERROR;
		}
		break;
	case 14: /* ACCEPT SPDU */
		if (length != (message->size - 2))
			return SESSION_ERROR;
		if (parseSessionHeaderParameters(session, message, length) == SESSION_OK)
			return SESSION_CONNECT;
		else {
			printf("iso_session.c: error parsing accept spdu\n");
			return SESSION_ERROR;
		}

		break;
	case 1: /* Give token / data SPDU */
		if (message->size < 4)
			return SESSION_ERROR;
		if ((length == 0) && (buffer[2] == 1) && (buffer[3] == 0)) {
			ByteBuffer_wrap(&session->userData, message->buffer + 4, message->size - 4, message->maxSize - 4);

			return SESSION_DATA;
		}
		return SESSION_ERROR;
	}

	return SESSION_ERROR;
}
Exemplo n.º 2
0
IsoSessionIndication
IsoSession_parseMessage(IsoSession* session, ByteBuffer* message)
{
    uint8_t* buffer = message->buffer;
    uint8_t id;
    uint8_t length;

    if (message->size > 1) {
        id = buffer[0];
        length = buffer[1];
    }
    else
        return SESSION_ERROR;

    switch (id) {
    case 13: /* CONNECT(CN) SPDU */
        if (length != (message->size - 2))
            return SESSION_ERROR;
        if (parseSessionHeaderParameters(session, message, length) == SESSION_OK)
            return SESSION_CONNECT;
        else {
            if (DEBUG_SESSION)
                printf("SESSION: error parsing connect spdu\n");
            return SESSION_ERROR;
        }
        break;
    case 14: /* ACCEPT SPDU */
        if (length != (message->size - 2))
            return SESSION_ERROR;
        if (parseSessionHeaderParameters(session, message, length) == SESSION_OK)
            return SESSION_CONNECT;
        else {
            if (DEBUG_SESSION)
                printf("SESSION: error parsing accept spdu\n");
            return SESSION_ERROR;
        }

        break;
    case 1: /* Give token / data SPDU */
        if (message->size < 4)
            return SESSION_ERROR;

        if ((length == 0) && (buffer[2] == 1) && (buffer[3] == 0)) {
            ByteBuffer_wrap(&session->userData, message->buffer + 4, message->size - 4, message->maxSize - 4);

            return SESSION_DATA;
        }
        return SESSION_ERROR;

    case 8: /* NOT-FINISHED SPDU */
        return SESSION_NOT_FINISHED;

    case 9: /* FINISH SPDU */
        if (DEBUG_SESSION)
            printf("SESSION: recvd FINISH SPDU\n");

        if (length != (message->size - 2))
            return SESSION_ERROR;

        if (parseSessionHeaderParameters(session, message, length) == SESSION_OK)
            return SESSION_FINISH;
        else
            return SESSION_ERROR;

        break;

    case 10: /* DISCONNECT SPDU */
        if (DEBUG_SESSION)
            printf("SESSION: recvd DISCONNECT SPDU\n");

        if (length != (message->size - 2))
            return SESSION_ERROR;

        if (parseSessionHeaderParameters(session, message, length) == SESSION_OK)
            return SESSION_DISCONNECT;
        else
            return SESSION_ERROR;

        break;

    case 25: /* ABORT SPDU */
        return SESSION_ABORT;

    default:
        break;
    }

    return SESSION_ERROR;
}