trace/traceviewer/com.nokia.traceviewer.ost/src/com/nokia/traceviewer/ost/OstMessageProcessor.java
author Matti Laitinen <matti.t.laitinen@nokia.com>
Wed, 23 Jun 2010 14:49:59 +0300
changeset 11 5b9d4d8641ce
permissions -rw-r--r--
TraceViewer 2.6.0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
     1
/*
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
     2
 * Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). 
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
     3
 * All rights reserved.
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
     8
 *
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
     9
 * Initial Contributors:
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    11
 *
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    12
 * Contributors:
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    13
 *
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    14
 * Description:
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    15
 *
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    16
 * OST Message Processor 
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    17
 *
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    18
 */
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    19
package com.nokia.traceviewer.ost;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    20
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    21
import java.io.IOException;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    22
import java.nio.ByteBuffer;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    23
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    24
import com.nokia.traceviewer.engine.TraceViewerConst;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    25
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    26
/**
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    27
 * OST Message Processor
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    28
 * 
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    29
 */
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    30
public class OstMessageProcessor implements OstConsts, TraceViewerConst {
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    31
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    32
	/**
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    33
	 * Buffer where data is located
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    34
	 */
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    35
	private final ByteBuffer receiveBuffer;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    36
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    37
	/**
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    38
	 * Temporary buffer for data
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    39
	 */
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    40
	private final ByteBuffer tempBuffer;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    41
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    42
	/**
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    43
	 * Callback class
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    44
	 */
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    45
	private final OstMessageCallback callback;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    46
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    47
	/**
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    48
	 * If true, stop processing the messages
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    49
	 */
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    50
	private boolean stopped;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    51
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    52
	/**
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    53
	 * @param callback
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    54
	 *            callback where messages are returned
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    55
	 * @param receiveBuffer
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    56
	 *            buffer where data is located
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    57
	 */
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    58
	public OstMessageProcessor(OstMessageCallback callback,
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    59
			ByteBuffer receiveBuffer) {
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    60
		this.callback = callback;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    61
		this.receiveBuffer = receiveBuffer;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    62
		tempBuffer = ByteBuffer.allocateDirect(MAX_MESSAGE_SIZE);
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    63
	}
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    64
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    65
	/**
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    66
	 * Processes buffer to messages
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    67
	 * 
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    68
	 * @throws IOException
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    69
	 */
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    70
	public void processBuffer() throws IOException {
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    71
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    72
		boolean messageFound = false;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    73
		boolean processorResult = false;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    74
		int msgLength = 0;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    75
		int versionNr = 0;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    76
		int msgStart = 0;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    77
		// Parses all complete messages
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    78
		int position = receiveBuffer.position();
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    79
		do {
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    80
			messageFound = false;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    81
			// Reads next message length if there is enough data
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    82
			if (position - msgStart > OST_V01_HEADER_LENGTH) {
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    83
				versionNr = 0;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    84
				msgLength = 0;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    85
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    86
				// Get OST version and check the base header length
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    87
				versionNr |= (receiveBuffer.get(msgStart + OST_VERSION_OFFSET) & BYTE_MASK);
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    88
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    89
				int headerLength = 0;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    90
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    91
				// OST version 0.1
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    92
				if (versionNr == OST_V01) {
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    93
					headerLength = OST_V01_HEADER_LENGTH;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    94
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    95
					// Get message length
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    96
					msgLength |= (receiveBuffer.getShort(msgStart
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    97
							+ OST_V01_LENGTH_OFFSET_1) & SHORT_MASK)
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    98
							+ headerLength;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    99
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   100
					// OST version 0.0
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   101
				} else if (versionNr == OST_V00) {
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   102
					headerLength = OST_V00_HEADER_LENGTH;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   103
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   104
					// Get message length
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   105
					msgLength |= (receiveBuffer.getShort(msgStart
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   106
							+ OST_V01_LENGTH_OFFSET_1) & SHORT_MASK)
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   107
							+ headerLength;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   108
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   109
					// OST version 0.5 or 1.0
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   110
				} else if (versionNr == OST_V05 || versionNr == OST_V10) {
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   111
					headerLength = OST_V05_HEADER_LENGTH;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   112
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   113
					// Get message length
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   114
					msgLength |= (receiveBuffer.get(msgStart
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   115
							+ OST_V05_LENGTH_OFFSET) & BYTE_MASK)
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   116
							+ headerLength;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   117
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   118
					// If length is only the header length, there are 4 bytes
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   119
					// extended length in Little Endian (LE)
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   120
					if (msgLength == headerLength) {
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   121
						headerLength += OST_V05_EXT_LENGTH_LENGTH;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   122
						msgLength = receiveBuffer.getInt(msgStart
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   123
								+ OST_V05_EXT_LENGTH_OFFSET);
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   124
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   125
						// Reverse because of Little Endian
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   126
						msgLength = Integer.reverseBytes(msgLength);
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   127
						msgLength += headerLength;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   128
					}
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   129
				} else {
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   130
					// Unsupported OST version.
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   131
					System.out
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   132
							.println("Unsupported OST version: 0x" + Integer.toHexString(versionNr)); //$NON-NLS-1$
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   133
				}
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   134
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   135
				// Parses message if it is completely in buffer
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   136
				if (position >= msgStart + msgLength) {
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   137
					processorResult = callback.processMessage(msgStart,
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   138
							msgLength, headerLength, versionNr);
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   139
					msgStart += msgLength;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   140
					messageFound = true;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   141
				}
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   142
			}
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   143
		} while (messageFound && processorResult && !stopped);
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   144
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   145
		if (!stopped) {
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   146
			// Writes the remaining data into beginning of receive
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   147
			// buffer. The next socket read operation will append data
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   148
			// into buffer
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   149
			int remainderLength = position - msgStart;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   150
			if (remainderLength > 0 && processorResult) {
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   151
				receiveBuffer.position(msgStart);
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   152
				receiveBuffer.limit(msgStart + remainderLength);
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   153
				tempBuffer.position(0);
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   154
				tempBuffer.limit(MAX_MESSAGE_SIZE);
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   155
				tempBuffer.put(receiveBuffer);
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   156
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   157
				receiveBuffer.position(0);
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   158
				receiveBuffer.limit(RECEIVE_BUFFER_SIZE);
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   159
				tempBuffer.position(0);
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   160
				tempBuffer.limit(remainderLength);
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   161
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   162
				receiveBuffer.put(tempBuffer);
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   163
				receiveBuffer.position(remainderLength);
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   164
			} else {
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   165
				receiveBuffer.position(0);
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   166
				receiveBuffer.limit(RECEIVE_BUFFER_SIZE);
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   167
			}
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   168
		}
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   169
	}
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   170
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   171
	/**
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   172
	 * Reads the 8 byte timestamp from the data buffer
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   173
	 * 
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   174
	 * @param msgStart
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   175
	 *            message start offset
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   176
	 * @param timestampOffset
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   177
	 *            offset to the timestamp in the message
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   178
	 * @return the timestamp
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   179
	 */
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   180
	public long parseTimeStampToNanosecs(int msgStart, int timestampOffset) {
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   181
		long timestamp = 0;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   182
		try {
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   183
			timestamp = receiveBuffer.getLong(msgStart + timestampOffset)
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   184
					& TIMESTAMP_MASK;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   185
		} catch (Throwable t) {
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   186
			t.printStackTrace();
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   187
			// Couldn't get timestamp, return MIN_VALUE to set trace as non
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   188
			// valid
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   189
			timestamp = Long.MIN_VALUE;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   190
		}
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   191
		return timestamp;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   192
	}
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   193
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   194
	/**
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   195
	 * Close the processor
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   196
	 */
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   197
	void close() {
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   198
		stopped = true;
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   199
	}
5b9d4d8641ce TraceViewer 2.6.0
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   200
}