Testability SOME/IP Catalog#

The CGW Java Testability service provides echo, event and callback-client controls. See payload byte layouts and parser behavior and variable-length payloads.

Scope And Identity#

  • Service ID 65280 / 0xFF00, interface version 1, compiled server and client.

  • SHA-256: 80f240465f2d0afadb078dddcfb6916fc02f5bc0c6324fce958d301b4edaffaf.

  • Application version v15.3.3-r1, version code Y317, build timestamp 2018-03-16T21:23:48Z.

  • Recovered preference state is disabled (false); the compiled flag default is also false. Listener availability depends on deployment configuration.

  • 30601 is the conditional default TCP listener port, not the service ID; local instance defaults to 4. No SOME/IP-SD behavior is inferred.

The Java client b.a.c.c.a.c$a passes 65280, method ID, and char 1 to the transport. The server registry someip.c.e.a binds (65280, 1).

Exact Closure#

23 methods and 1 event, not all integers 1 through 88. Client calls and server switch non-default cases use the same IDs.

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 16, 19, 20, 23, 28, 31, 32, 33, 38, 39, 87, 88

Coverage: 22 nonempty request DTOs, 18 nonempty response DTOs, one event DTO, and six nested model/enum schemas: 47 schemas, 59 ordered schema fields. All are resolved; zero partial methods/events or unresolved schema references. The explicit empty request (88) and five server-empty success results are cataloged separately. These counts cover Testability only, not configuration, voice, network, PubSub or all services in the JAR.

Complete Method Catalog#

Fields are in wire order. uintN/intN mean unsigned/signed N-bit values. SOMEIP_CATALOG.json gives full class names, codec endpoints, offsets and nested schemas.

ID (Hex)

Proven Name

Request Fields

Server Success Fields

1 (0x0001)

checkByteOrder

operationType: b.a.c.a.a; inUINT32: uint32; inUINT16: uint16

outUINT16: uint16; outUINT32: uint32

2 (0x0002)

echoBool

inBOOL: bool

outBOOL: bool

3 (0x0003)

echoUINT8

inUINT8: uint8

outUINT8: uint8

4 (0x0004)

echoUINT16

inUINT16: uint16

outUINT16: uint16

5 (0x0005)

echoUINT32

inUINT32: uint32

outUINT32: uint32

6 (0x0006)

echoUINT64

inUINT64: uint64

outUINT64: uint64

7 (0x0007)

echoSINT8

inSINT8: int8

outSINT8: int8

8 (0x0008)

echoSINT16

inSINT16: int16

outSINT16: int16

9 (0x0009)

echoSINT32

inSINT32: int32

outSINT32: int32

10 (0x000A)

echoSINT64

inSINT64: int64

outSINT64: int64

13 (0x000D)

echoInverseStruct

inStruct: b.a.c.a.f

outStruct: b.a.c.a.f

16 (0x0010)

echoInverseDynamicArray

inArray: b.a.c.a.e

outArray: b.a.c.a.e

19 (0x0013)

echoComplexDynamicArray

inArray: b.a.c.a.c

outArray: b.a.c.a.c

20 (0x0014)

echoUTF8String

inString: string

outString: string

23 (0x0017)

echoComplexStruct

inStruct: b.a.c.a.d

outStruct: b.a.c.a.d

28 (0x001C)

echoUINT8UINT16UINT32

inUINT8: uint8; inUINT16: uint16; inUINT32: uint32

outUINT8: uint8; outUINT16: uint16; outUINT32: uint32

31 (0x001F)

triggerEventUINT8

triggerNRetry: uint8

empty (0 bytes)

32 (0x0020)

triggerEchoUINT8

inUINT8: uint8

empty (0 bytes)

33 (0x0021)

triggerEcho_UINT8_UINT16_UINT32

inUINT8: uint8; inUINT16: uint16; inUINT32: uint32

empty (0 bytes)

38 (0x0026)

activateTsClient

startTimeout: uint8

empty (0 bytes)

39 (0x0027)

deactivateTsClient

startTimeout: uint8

empty (0 bytes)

87 (0x0057)

echoLargeDataArray

inArray: b.a.c.a.b

outArray: b.a.c.a.b

88 (0x0058)

getLastValueEventUINT8

empty (0 bytes)

outEventValue: uint8

Per-Method Behavior And Gates#

  • 1 checkByteOrder: Manager adds uint32 + uint16 for enum 0 and returns high 16 bits then low 32 bits of the sum. Unknown enum byte maps to null and manager dereference becomes NOT_OK, not an enum-parser validation error.

  • 13 echoInverseStruct: Response TestStruct.a = input.b & 0xff; response.b = input.a & 0xffff. Not a byte-order negotiation.

  • 16 echoInverseDynamicArray: Manager reverses element order, not individual byte bit order.

  • 31 triggerEventUINT8: Client uses request-no-return; transport suppresses success/error replies, although dispatcher completes with empty success bytes. triggerNRetry is passed once as event data; no retry loop implemented despite field name.

  • 32 triggerEchoUINT8: Client uses request-no-return; transport suppresses success/error replies, although dispatcher completes with empty success bytes. Manager requires an activated callback client; otherwise NOT_OK (1).

  • 33 triggerEcho_UINT8_UINT16_UINT32: Client uses request-no-return; transport suppresses success/error replies, although dispatcher completes with empty success bytes. Manager requires an activated callback client; otherwise NOT_OK (1).

  • 38 activateTsClient: Client waits for success/error but ignores successful response bytes. Empty success is proved by server, not by ignored client result. Delay is request uint8 seconds, multiplied by 1000 before Thread.sleep. Manager uses custom return code 32 for invalid client state/interruption and activation I/O failure.

  • 39 deactivateTsClient: Client waits for success/error but ignores successful response bytes. Empty success is proved by server, not by ignored client result. Delay is request uint8 seconds, multiplied by 1000 before Thread.sleep. Manager uses custom return code 32 for invalid client state/interruption and activation I/O failure. Deactivation closes the client but does not explicitly clear its reference; connection-death callback clears it. Timing-dependent stale reference is possible.

  • 88 getLastValueEventUINT8: Server case 88 ignores request payload and does not validate that incoming length is zero. Manager requires an activated callback client; otherwise NOT_OK (1). Returns cached last uint8 event from callback client; initial cache is zero. Does not read the local server last event.

Event#

32769 / 0x8001, TestEventUINT8: ordered payload data: uint8, exactly one serialized byte. DTO b.a.c.c.a.a.a; parser b.a.c.c.a.a.b.parse; serializer b.a.c.c.a.a.c.serialize. Manager method 31 publishes once using its triggerNRetry input as the value. Client registration is for 65280/version 1 and event switch 32769. Connected peers are registered for event forwarding on connection setup (decompiled/someip/d/e.java:94); no SD subscription mechanism is assumed. Event wrapper identity is explicit in decompiled/b/a/a/c/a/a/a.java:64.

Nested Schemas#

Model

Ordered Fields / Encoding

Bounds And Semantics

b.a.c.a.a

value: uint8 (0 = obfuscated enum constant a; manager treats as addition)

Only enum value 0 is defined. Lookup returns null for unknown bytes; manager dereference then fails with NOT_OK. Null enum serialization is invalid.

b.a.c.a.f

a: uint8 (1 byte; Java short); b: uint16 (2 bytes big-endian; Java int)

b.a.c.a.e

arrayMember: uint8[] (uint8 big-endian payload-byte length L, then inline elements until consumed >= L)

Capacity 5; default count 0. Parser uses full payload end for each element, not declared array end; no exact-length/multiple-of-element-size check. Capacity overflow raises RuntimeException. Empty prefix decodes as an empty array.

b.a.c.a.c

arrayMember: b.a.c.a.f[] (uint8 big-endian payload-byte length L, then inline elements until consumed >= L)

Capacity 5; default count 1. Parser uses full payload end for each element, not declared array end; no exact-length/multiple-of-element-size check. Capacity overflow raises RuntimeException. Empty input retains default logical size 1 with a null element, so echo serialization fails.

b.a.c.a.b

arrayMember: b.a.c.a.f[] (uint16 big-endian payload-byte length L, then inline elements until consumed >= L)

Capacity 8191; default count 0. Parser uses full payload end for each element, not declared array end; no exact-length/multiple-of-element-size check. Capacity overflow raises RuntimeException. Empty prefix decodes as an empty array.

b.a.c.a.d

a: uint8 (1 byte); b: string (uint8 byte length L + L UTF-8 bytes, no BOM/terminator); c: b.a.c.a.e (inline dynamic-array schema)

b serializer maximum 96 UTF-8 bytes; parser accepts full uint8 prefix range. c is bounded to 5 bytes. No struct-level prefix.

Wire Semantics#

  • All multi-byte integers and length prefixes are big-endian; fields concatenate without padding. SOME/IP header is 16 bytes; length at offset 4 is payload length plus 8. The JSON includes all eight ordered header fields.

  • Boolean is one byte and parser accepts only 0 or 1. Unsigned numeric serializers enforce their width ranges. UInt64 uses Java BigInteger; signed integers use two’s complement.

  • Strings use someip.e.f.b: UTF-8 with no BOM and no terminator. A one-byte prefix gives encoded byte count, not character count. Empty string has length zero; null is invalid. The encoder enforces 96 bytes in this service, whereas decoder permits up to 255 bytes if available. Invalid UTF-8 uses Java String replacement behavior; an echo can expand or fail the encoder maximum.

  • Dynamic-array length is serialized payload bytes excluding the prefix, never element count. Small scalar array: 1-byte length + at most 5 uint8 elements. Complex array: 1-byte length + at most 5 three-byte TestStruct elements. Large array: 2-byte length + at most 8191 three-byte elements (24573 data bytes, 24575 including prefix).

  • TestStruct is 3 bytes: uint8 a then uint16 b. TestComplexStruct is uint8 a, uint8-length UTF-8 b, then uint8-length uint8 array c. Nominal maximum encoded complex struct is 104 bytes.

  • No wire null markers or optional fields are present. Null DTO/model/enum/string/BigInteger fails serialization. Default nested objects and array logical lengths must not be mistaken for wire optionality.

  • Primitive decoders check against the full payload end. Array loops stop when consumed bytes are at least the declared length, without checking divisibility or restricting each element to that subrange. A non-multiple-of-3 complex length can consume beyond its declared subrange if trailing bytes exist. Fixed backing capacities still apply; overflow is caught as a parse error.

  • Dispatcher ignores parser consumed counts, so valid leading fields with trailing data are not rejected. Case 88 ignores incoming bytes entirely, even though the compiled client explicitly sends zero bytes.

  • Empty complex dynamic array is a special failure: default logical count is 1 and the first reference remains null. The manager echo then fails response serialization with NOT_OK. Other dynamic arrays default empty.

Responses And Errors#

  • Methods 31, 32, 33, 38 and 39 explicitly complete server success with zero bytes. Client result ignoring alone would not prove this. For 38 and 39 the client waits but ignores successful response bytes: client view is ignored/unspecified.

  • Methods 31, 32 and 33 use REQUEST_NO_RETURN (message type 1); server transport suppresses success and error replies for those requests. All other compiled method calls use REQUEST (0). Notification=2, response=128, error=129.

  • Router checks protocol version 1, registered service ID and interface version. Numeric error codes: NOT_OK=1, UNKNOWN_SERVICE=2, UNKNOWN_METHOD=3, WRONG_PROTOCOL_VERSION=7, WRONG_INTERFACE_VERSION=8, MALFORMED_MESSAGE=9. Manager activation/deactivation can return custom 32. Unknown method is dispatcher default, not a modeled method.

  • Server router/dispatcher does not reject a request solely because header return_code is non-OK in the inspected path. Client response handler checks OK and propagates non-OK. Header return-code semantics are separate from domain payload schemas.

  • Parse exceptions map to MALFORMED_MESSAGE; manager runtime exceptions and response serialization failures map to NOT_OK. Error payload is explicitly empty: although the router initially allocates a message-text-sized buffer, org.a.b.b.e.c.a(someip.c.e) immediately replaces it with zero bytes and resets the payload length to zero. The numeric return code is in the header, not a success DTO field.

Runtime Conditions And Uncertainties#

  • enableSomeIpTestabilityService gates creation/startup in someip.SomeIpServiceManager. Recovered configuration does not determine current reachability.

  • Listener port and instance are preference-overridable. Callback client creation is conditional on method 38, state, delay, and TCP connection success; methods 32, 33 and 88 require that client.

  • Event delivery requires a connected, registered peer. Last-value cache starts at zero and changes on callback-client events. Deactivation can leave a stale nonnull reference until the connection-close callback runs.

  • Wire schemas are complete for this code family. Runtime scheduling, preference overrides, reachability and resource limits depend on deployment. Parser consequences here follow the compiled implementation, not a guarantee for every deployed build. Global transport maximum-message-size is a separate gate and is not inferred from the 8191-element model capacity.

  • Generic fields a/b/c and enum constant a retain their observed names. No credentials, keys, VIN or unrelated domain payload fields are part of this service’s reachable schema closure.

Codec classes are merged/obfuscated: only the selected serialize/parse method defines a given DTO’s wire layout. Unrelated methods in those classes are not Testability fields.