diff --git a/chatcleaner.pro b/chatcleaner.pro
index d697e4a3..6d63b4a9 100644
--- a/chatcleaner.pro
+++ b/chatcleaner.pro
@@ -13,11 +13,9 @@ OBJECTS_DIR = obj
TEMPLATE = app
INCLUDEPATH += src/ \
src/chatcleaner/ \
- src/third_party/asn1/ \
src/net/
DEPENDPATH += src/ \
src/chatcleaner/ \
- src/third_party/asn1/ \
src/net/
SOURCES += src/chatcleaner/chatcleaner.cpp \
src/chatcleaner/cleanerserver.cpp \
@@ -39,6 +37,7 @@ HEADERS += src/chatcleaner/cleanerserver.h \
LIBPATH += lib
LIBS += -lpokerth_lib \
-lpokerth_protocol \
+ -lprotobuf \
-ltinyxml
win32 {
@@ -53,12 +52,13 @@ win32 {
INCLUDEPATH += $${PREFIX}/include
}
mac {
- # make it x86_64 only
- CONFIG += x86_64
- CONFIG -= x86
- CONFIG -= ppc
- QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6
- QMAKE_CXXFLAGS -= -std=gnu++0x
+ # make it x86_64 only
+ CONFIG += x86_64
+ CONFIG -= x86
+ CONFIG -= ppc
+ QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6
+ QMAKE_CXXFLAGS -= -std=gnu++0x
LIBPATH += /Developer/SDKs/MacOSX10.5.sdk/usr/lib
- INCLUDEPATH += /Developer/SDKs/MacOSX10.6.sdk/usr/include/
+ INCLUDEPATH += /Developer/SDKs/MacOSX10.6.sdk/usr/include/
+ INCLUDEPATH += /usr/local/include
}
diff --git a/src/net/internalchatcleanerpacket.h b/chatcleaner.proto
similarity index 56%
rename from src/net/internalchatcleanerpacket.h
rename to chatcleaner.proto
index 0de52e60..5f7b23e0 100644
--- a/src/net/internalchatcleanerpacket.h
+++ b/chatcleaner.proto
@@ -1,6 +1,6 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
- * Copyright (C) 2006-2012 Felix Hammer, Florian Thauer, Lothar May *
+ * Copyright (C) 2006-2013 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
@@ -28,35 +28,64 @@
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
-/* PokerTH chat cleaner packet. */
-#ifndef _INTERNALCHATCLEANERPACKET_H_
-#define _INTERNALCHATCLEANERPACKET_H_
+option java_package = "de.chatcleaner.protocol";
+option java_outer_classname = "ProtoBuf";
+option optimize_for = LITE_RUNTIME;
-#define CLEANER_PROTOCOL_VERSION 2
-#define MAX_CLEANER_PACKET_SIZE 384
+message CleanerInitMessage {
+ required uint32 requestedVersion = 1;
+ required string clientSecret = 2;
+}
-typedef struct ChatCleanerMessage ChatCleanerMessage_t;
+message CleanerInitAckMessage {
+ required uint32 serverVersion = 1;
+ required string serverSecret = 2;
+}
-class InternalChatCleanerPacket
-{
-public:
- InternalChatCleanerPacket();
+enum CleanerChatType {
+ cleanerChatTypeLobby = 0;
+ cleanerChatTypeGame = 1;
+}
- InternalChatCleanerPacket(ChatCleanerMessage_t *msg)
- : m_msg(msg) {
+message CleanerChatRequestMessage {
+ required uint32 requestId = 1;
+ required CleanerChatType cleanerChatType = 2;
+ optional uint32 gameId = 3 [default = 0];
+ required uint32 playerId = 4;
+ required string playerName = 5;
+ required string chatMessage = 6;
+}
+
+message CleanerChatReplyMessage {
+ required uint32 requestId = 1;
+ required CleanerChatType cleanerChatType = 2;
+ optional uint32 gameId = 3 [default = 0];
+ required uint32 playerId = 4;
+ enum CleanerActionType {
+ cleanerActionNone = 0;
+ cleanerActionWarning = 1;
+ cleanerActionKick = 2;
+ cleanerActionBan = 3;
+ cleanerActionMute = 4;
}
- ~InternalChatCleanerPacket();
- ChatCleanerMessage_t *GetMsg() {
- return m_msg;
- }
- ChatCleanerMessage_t **GetMsgPtr() {
- return &m_msg;
+ required CleanerActionType cleanerActionType = 5;
+ optional string cleanerText = 6 [default = ""];
+}
+
+// The main message type (it is prefixed by 4 bytes length of the message).
+
+message ChatCleanerMessage {
+ enum ChatCleanerMessageType {
+ Type_CleanerInitMessage = 1;
+ Type_CleanerInitAckMessage = 2;
+ Type_CleanerChatRequestMessage = 3;
+ Type_CleanerChatReplyMessage = 4;
}
+ required ChatCleanerMessageType messageType = 1;
-private:
- ChatCleanerMessage_t *m_msg;
-};
-
-#endif
-
+ optional CleanerInitMessage cleanerInitMessage = 2;
+ optional CleanerInitAckMessage cleanerInitAckMessage = 3;
+ optional CleanerChatRequestMessage cleanerChatRequestMessage = 4;
+ optional CleanerChatReplyMessage cleanerChatReplyMessage = 5;
+}
diff --git a/docs/build_mingw_windows.txt b/docs/build_mingw_windows.txt
index e6fd79b1..dc241c03 100644
--- a/docs/build_mingw_windows.txt
+++ b/docs/build_mingw_windows.txt
@@ -12,7 +12,7 @@ on your Linux system.
3. Within /opt/mingw, run
make gcc
-make qt
+make qt5
make boost
make curl
make libgsasl
diff --git a/docs/chatcleaner.asn1 b/docs/chatcleaner.asn1
deleted file mode 100644
index 42aa788d..00000000
--- a/docs/chatcleaner.asn1
+++ /dev/null
@@ -1,76 +0,0 @@
-/*****************************************************************************
- * PokerTH - The open source texas holdem engine *
- * Copyright (C) 2006-2011 Felix Hammer, Florian Thauer, Lothar May *
- * *
- * This program is free software: you can redistribute it and/or modify *
- * it under the terms of the GNU Affero General Public License as *
- * published by the Free Software Foundation, either version 3 of the *
- * License, or (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU Affero General Public License for more details. *
- * *
- * You should have received a copy of the GNU Affero General Public License *
- * along with this program. If not, see . *
- *****************************************************************************/
-
-CHATCLEANER-PROTOCOL DEFINITIONS
-IMPLICIT TAGS
-EXTENSIBILITY IMPLIED ::=
-
-BEGIN
-
-ChatCleanerMessage ::= CHOICE {
- cleanerInitMessage CleanerInitMessage,
- cleanerInitAckMessage CleanerInitAckMessage,
- cleanerChatRequestMessage CleanerChatRequestMessage,
- cleanerChatReplyMessage CleanerChatReplyMessage
-}
-
-CleanerInitMessage ::= [APPLICATION 0] SEQUENCE {
- requestedVersion INTEGER(0..65535),
- clientSecret UTF8String (SIZE(1..32))
-}
-
-CleanerInitAckMessage ::= [APPLICATION 1] SEQUENCE {
- serverVersion INTEGER(0..65535),
- serverSecret UTF8String (SIZE(1..32))
-}
-
-CleanerChatType ::= CHOICE {
- cleanerChatTypeLobby [0] CleanerChatTypeLobby,
- cleanerChatTypeGame [1] CleanerChatTypeGame
-}
-
-CleanerChatTypeLobby ::= SEQUENCE {
-}
-
-CleanerChatTypeGame ::= SEQUENCE {
- gameId INTEGER(1..4294967295)
-}
-
-CleanerChatRequestMessage ::= [APPLICATION 2] SEQUENCE {
- requestId INTEGER(1..4294967295),
- cleanerChatType CleanerChatType,
- playerId INTEGER(1..4294967295),
- playerName UTF8String (SIZE(1..32)),
- chatMessage UTF8String (SIZE(1..128))
-}
-
-CleanerChatReplyMessage ::= [APPLICATION 3] SEQUENCE {
- requestId INTEGER(1..4294967295),
- cleanerChatType CleanerChatType,
- playerId INTEGER(1..4294967295),
- cleanerActionType ENUMERATED {
- cleanerActionNone (0),
- cleanerActionWarning (1),
- cleanerActionKick (2),
- cleanerActionBan (3),
- cleanerActionMute (4)
- },
- cleanerText UTF8String (SIZE(1..128)) OPTIONAL
-}
-
-END
diff --git a/docs/pokerth.asn1 b/docs/pokerth.asn1
deleted file mode 100644
index adddceaf..00000000
--- a/docs/pokerth.asn1
+++ /dev/null
@@ -1,848 +0,0 @@
-/*****************************************************************************
- * PokerTH - The open source texas holdem engine *
- * Copyright (C) 2006-2011 Felix Hammer, Florian Thauer, Lothar May *
- * *
- * This program is free software: you can redistribute it and/or modify *
- * it under the terms of the GNU Affero General Public License as *
- * published by the Free Software Foundation, either version 3 of the *
- * License, or (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU Affero General Public License for more details. *
- * *
- * You should have received a copy of the GNU Affero General Public License *
- * along with this program. If not, see . *
- *****************************************************************************/
-
- /* This file is now deprecated! google protocol buffers are used instead.
- * Please refer to pokerth.proto. */
-
-POKERTH-PROTOCOL DEFINITIONS
-IMPLICIT TAGS
-EXTENSIBILITY IMPLIED ::=
-
-BEGIN
-
-PokerTHMessage ::= CHOICE {
- announceMessage AnnounceMessage,
- initMessage InitMessage,
- authMessage AuthMessage,
- initAckMessage InitAckMessage,
- avatarRequestMessage AvatarRequestMessage,
- avatarReplyMessage AvatarReplyMessage,
- playerListMessage PlayerListMessage,
- gameListMessage GameListMessage,
- playerInfoRequestMessage PlayerInfoRequestMessage,
- playerInfoReplyMessage PlayerInfoReplyMessage,
- subscriptionRequestMessage SubscriptionRequestMessage,
- joinGameRequestMessage JoinGameRequestMessage,
- joinGameReplyMessage JoinGameReplyMessage,
- gamePlayerMessage GamePlayerMessage,
- kickPlayerRequestMessage KickPlayerRequestMessage,
- leaveGameRequestMessage LeaveGameRequestMessage,
- invitePlayerToGameMessage InvitePlayerToGameMessage,
- inviteNotifyMessage InviteNotifyMessage,
- rejectGameInvitationMessage RejectGameInvitationMessage,
- rejectInvNotifyMessage RejectInvNotifyMessage,
- startEventMessage StartEventMessage,
- startEventAckMessage StartEventAckMessage,
- gameStartMessage GameStartMessage,
- handStartMessage HandStartMessage,
- playersTurnMessage PlayersTurnMessage,
- myActionRequestMessage MyActionRequestMessage,
- yourActionRejectedMessage YourActionRejectedMessage,
- playersActionDoneMessage PlayersActionDoneMessage,
- dealFlopCardsMessage DealFlopCardsMessage,
- dealTurnCardMessage DealTurnCardMessage,
- dealRiverCardMessage DealRiverCardMessage,
- allInShowCardsMessage AllInShowCardsMessage,
- endOfHandMessage EndOfHandMessage,
- showMyCardsRequestMessage ShowMyCardsRequestMessage,
- afterHandShowCardsMessage AfterHandShowCardsMessage,
- endOfGameMessage EndOfGameMessage,
- playerIdChangedMessage PlayerIdChangedMessage,
- askKickPlayerMessage AskKickPlayerMessage,
- askKickDeniedMessage AskKickDeniedMessage,
- startKickPetitionMessage StartKickPetitionMessage,
- voteKickRequestMessage VoteKickRequestMessage,
- voteKickReplyMessage VoteKickReplyMessage,
- kickPetitionUpdateMessage KickPetitionUpdateMessage,
- endKickPetitionMessage EndKickPetitionMessage,
- statisticsMessage StatisticsMessage,
- chatRequestMessage ChatRequestMessage,
- chatMessage ChatMessage,
- chatRejectMessage ChatRejectMessage,
- dialogMessage DialogMessage,
- timeoutWarningMessage TimeoutWarningMessage,
- resetTimeoutMessage ResetTimeoutMessage,
- reportAvatarMessage ReportAvatarMessage,
- reportAvatarAckMessage ReportAvatarAckMessage,
- reportGameMessage ReportGameMessage,
- reportGameAckMessage ReportGameAckMessage,
- errorMessage ErrorMessage
-}
-
-AnnounceMessage ::= [APPLICATION 0] SEQUENCE {
- protocolVersion Version,
- latestGameVersion Version,
- latestBetaRevision INTEGER(0..65535),
- serverType ENUMERATED {
- serverTypeLAN (0),
- serverTypeInternetNoAuth (1),
- serverTypeInternetAuth (2)
- },
- numPlayersOnServer INTEGER(0..65535)
-}
-
--- buildId contains a constant build id (specific for Windows/Linux/Mac builds)
-InitMessage ::= [APPLICATION 1] SEQUENCE {
- requestedVersion Version,
- buildId INTEGER,
- myLastSessionId Guid OPTIONAL,
- authServerPassword UTF8String (SIZE(1..64)) OPTIONAL,
- login CHOICE {
- guestLogin [0] GuestLogin,
- authenticatedLogin [1] AuthenticatedLogin,
- unauthenticatedLogin [2] UnauthenticatedLogin
- }
-}
-
-Version ::= SEQUENCE {
- major INTEGER(0..65535),
- minor INTEGER(0..65535)
-}
-
-GuestLogin ::= SEQUENCE {
- nickName UTF8String (SIZE(1..64))
-}
-
--- Login data is according to SCRAM SHA-1
-AuthenticatedLogin ::= SEQUENCE {
- clientUserData OCTET STRING (SIZE(1..256)),
- avatar AvatarHash OPTIONAL
-}
-
-UnauthenticatedLogin ::= SEQUENCE {
- nickName UTF8String (SIZE(1..64)),
- avatar AvatarHash OPTIONAL
-}
-
-AuthMessage ::= [APPLICATION 2] CHOICE {
- authServerChallenge [0] AuthServerChallenge,
- authClientResponse [1] AuthClientResponse,
- authServerVerification [2] AuthServerVerification
-}
-
-AuthServerChallenge ::= SEQUENCE {
- serverChallenge OCTET STRING (SIZE(1..256))
-}
-
-AuthClientResponse ::= SEQUENCE {
- clientResponse OCTET STRING (SIZE(1..256))
-}
-
-AuthServerVerification ::= SEQUENCE {
- serverVerification OCTET STRING (SIZE(1..256))
-}
-
-InitAckMessage ::= [APPLICATION 3] SEQUENCE {
- yourSessionId Guid,
- yourPlayerId NonZeroId,
- yourAvatar AvatarHash OPTIONAL,
- rejoinGameId NonZeroId OPTIONAL
-}
-
-AvatarRequestMessage ::= [APPLICATION 4] SEQUENCE {
- requestId NonZeroId,
- avatar AvatarHash
-}
-
-AvatarReplyMessage ::= [APPLICATION 5] SEQUENCE {
- requestId NonZeroId,
- avatarResult CHOICE {
- avatarHeader [0] AvatarHeader,
- avatarData [1] AvatarData,
- avatarEnd [2] AvatarEnd,
- unknownAvatar [3] UnknownAvatar
- }
-}
-
-AvatarHeader ::= SEQUENCE {
- avatarType NetAvatarType,
- avatarSize INTEGER(32..30720)
-}
-
-AvatarData ::= SEQUENCE {
- avatarBlock OCTET STRING (SIZE(1..256))
-}
-
-AvatarEnd ::= SEQUENCE {
-}
-
-UnknownAvatar ::= SEQUENCE {
-}
-
-AvatarHash ::= OCTET STRING (SIZE(16)) -- md5 hash value
-
-NetAvatarType ::= ENUMERATED {
- avatarImagePng (1),
- avatarImageJpg (2),
- avatarImageGif (3)
-}
-
-PlayerListMessage ::= [APPLICATION 6] SEQUENCE {
- playerId NonZeroId,
- playerListNotification ENUMERATED {
- playerListNew (0),
- playerListLeft (1)
- }
-}
-
-GameListMessage ::= [APPLICATION 7] SEQUENCE {
- gameId NonZeroId,
- gameListNotification CHOICE {
- gameListNew [0] GameListNew,
- gameListUpdate [1] GameListUpdate,
- gameListPlayerJoined [2] GameListPlayerJoined,
- gameListPlayerLeft [3] GameListPlayerLeft,
- gameListAdminChanged [4] GameListAdminChanged
- }
-}
-
-GameListNew ::= SEQUENCE {
- gameMode NetGameMode,
- isPrivate BOOLEAN,
- playerIds SEQUENCE SIZE(0..10) OF NonZeroId,
- adminPlayerId NonZeroId,
- gameInfo NetGameInfo
-}
-
-GameListUpdate ::= SEQUENCE {
- gameMode NetGameMode
-}
-
-GameListPlayerJoined ::= SEQUENCE {
- playerId NonZeroId
-}
-
-GameListPlayerLeft ::= SEQUENCE {
- playerId NonZeroId
-}
-
-GameListAdminChanged ::= SEQUENCE {
- newAdminPlayerId NonZeroId
-}
-
-NetGameMode ::= ENUMERATED {
- gameCreated (1),
- gameStarted (2),
- gameClosed (3)
-}
-
-PlayerInfoRequestMessage ::= [APPLICATION 8] SEQUENCE {
- playerId NonZeroId
-}
-
-PlayerInfoReplyMessage ::= [APPLICATION 9] SEQUENCE {
- playerId NonZeroId,
- playerInfoResult CHOICE {
- playerInfoData [0] PlayerInfoData,
- unknownPlayerInfo [1] UnknownPlayerInfo
- }
-}
-
-PlayerInfoRights ::= ENUMERATED {
- playerRightsGuest (1),
- playerRightsNormal (2),
- playerRightsAdmin (3)
-}
-
-PlayerInfoData ::= SEQUENCE {
- playerName UTF8String (SIZE(1..32)),
- isHuman BOOLEAN,
- playerRights PlayerInfoRights,
- countryCode UTF8String (SIZE(2)) OPTIONAL,
- avatarData SEQUENCE {
- avatarType NetAvatarType,
- avatar AvatarHash
- } OPTIONAL
-}
-
-UnknownPlayerInfo ::= SEQUENCE {
-}
-
--- The following request will not be confirmed by the server. It is used,
--- optionally, to reduce server traffic. The server might ignore it.
-SubscriptionRequestMessage ::= [APPLICATION 10] SEQUENCE {
- subscriptionAction ENUMERATED {
- unsubscribeGameList (1),
- resubscribeGameList (2)
- }
-}
-
-JoinGameRequestMessage ::= [APPLICATION 11] SEQUENCE {
- joinGameAction CHOICE {
- joinExistingGame [0] JoinExistingGame,
- joinNewGame [1] JoinNewGame,
- rejoinExistingGame [2] RejoinExistingGame
- },
- autoLeave BOOLEAN
-}
-
-JoinExistingGame ::= SEQUENCE {
- gameId NonZeroId,
- password UTF8String (SIZE(1..64)) OPTIONAL
-}
-
-JoinNewGame ::= SEQUENCE {
- gameInfo NetGameInfo,
- password UTF8String (SIZE(1..64)) OPTIONAL
-}
-
-RejoinExistingGame ::= SEQUENCE {
- gameId NonZeroId
-}
-
-JoinGameReplyMessage ::= [APPLICATION 12] SEQUENCE {
- gameId NonZeroId,
- joinGameResult CHOICE {
- joinGameAck [0] JoinGameAck,
- joinGameFailed [1] JoinGameFailed
- }
-}
-
-JoinGameAck ::= SEQUENCE {
- areYouGameAdmin BOOLEAN,
- gameInfo NetGameInfo
-}
-
-JoinGameFailed ::= SEQUENCE {
- joinGameFailureReason ENUMERATED {
- invalidGame (1),
- gameIsFull (2),
- gameIsRunning (3),
- invalidPassword (4),
- notAllowedAsGuest (5),
- notInvited (6),
- gameNameInUse (7),
- badGameName (8),
- invalidSettings (9),
- ipAddressBlocked (10),
- rejoinFailed (11)
- }
-}
-
-NetGameInfo ::= SEQUENCE {
- gameName UTF8String (SIZE(1..64)),
- netGameType ENUMERATED {
- normalGame (1),
- registeredOnlyGame (2),
- inviteOnlyGame (3),
- rankingGame (4)
- },
- maxNumPlayers INTEGER(2..10),
- raiseIntervalMode CHOICE {
- raiseEveryHands [0] INTEGER(1..1000),
- raiseEveryMinutes [1] INTEGER(1..1000)
- },
- endRaiseMode ENUMERATED {
- doubleBlinds (1),
- raiseByEndValue (2),
- keepLastBlind (3)
- },
- proposedGuiSpeed INTEGER(1..11),
- delayBetweenHands INTEGER(5..20), -- These are seconds
- playerActionTimeout INTEGER(0..60), -- These are seconds
- firstSmallBlind INTEGER(1..20000),
- endRaiseSmallBlindValue InitialAmountOfMoney,
- startMoney InitialNonZeroAmountOfMoney,
- manualBlinds SEQUENCE SIZE(0..30) OF InitialNonZeroAmountOfMoney
-}
-
-GamePlayerMessage ::= [APPLICATION 13] SEQUENCE {
- gameId NonZeroId,
- gamePlayerNotification CHOICE {
- gamePlayerJoined [0] GamePlayerJoined,
- gamePlayerLeft [1] GamePlayerLeft,
- gameAdminChanged [2] GameAdminChanged,
- removedFromGame [3] RemovedFromGame
- }
-}
-
-GamePlayerJoined ::= SEQUENCE {
- playerId NonZeroId,
- isGameAdmin BOOLEAN
-}
-
-GamePlayerLeft ::= SEQUENCE {
- playerId NonZeroId,
- gamePlayerLeftReason ENUMERATED {
- leftOnRequest (0),
- leftKicked (1),
- leftError (2)
- }
-}
-
-GameAdminChanged ::= SEQUENCE {
- newAdminPlayerId NonZeroId
-}
-
-RemovedFromGame ::= SEQUENCE {
- removedFromGameReason ENUMERATED {
- removedOnRequest (0), -- No error, client wished to leave.
- kickedFromGame (1),
- gameIsFull (2),
- gameIsRunning (3),
- gameTimeout (4),
- removedStartFailed (5)
- }
-}
-
-KickPlayerRequestMessage ::= [APPLICATION 14] SEQUENCE {
- gameId NonZeroId,
- playerId NonZeroId
-}
-
-LeaveGameRequestMessage ::= [APPLICATION 15] SEQUENCE {
- gameId NonZeroId
-}
-
-InvitePlayerToGameMessage ::= [APPLICATION 16] SEQUENCE {
- gameId NonZeroId,
- playerId NonZeroId
-}
-
-InviteNotifyMessage ::= [APPLICATION 17] SEQUENCE {
- gameId NonZeroId,
- playerIdWho NonZeroId,
- playerIdByWhom NonZeroId
-}
-
-RejectGameInvReason ::= ENUMERATED {
- no (0),
- busy (1)
-}
-
-RejectGameInvitationMessage ::= [APPLICATION 18] SEQUENCE {
- gameId NonZeroId,
- myRejectReason RejectGameInvReason
-}
-
-RejectInvNotifyMessage ::= [APPLICATION 19] SEQUENCE {
- gameId NonZeroId,
- playerId NonZeroId,
- playerRejectReason RejectGameInvReason
-}
-
-StartEventMessage ::= [APPLICATION 20] SEQUENCE {
- gameId NonZeroId,
- startEventType CHOICE {
- startEvent [0] StartEvent,
- rejoinEvent [1] RejoinEvent
- }
-}
-
-StartEvent ::= SEQUENCE {
- fillWithComputerPlayers BOOLEAN
-}
-
-RejoinEvent ::= SEQUENCE {
-}
-
-StartEventAckMessage ::= [APPLICATION 21] SEQUENCE {
- gameId NonZeroId
-}
-
-RejoinPlayerData ::= SEQUENCE {
- playerId NonZeroId,
- playerMoney AmountOfMoney
-}
-
-GameStartModeInitial ::= SEQUENCE {
- playerSeats SEQUENCE SIZE(2..10) OF NonZeroId
-}
-
-GameStartModeRejoin ::= SEQUENCE {
- handNum NonZeroId,
- rejoinPlayerData SEQUENCE SIZE(2..10) OF RejoinPlayerData
-}
-
-GameStartMessage ::= [APPLICATION 22] SEQUENCE {
- gameId NonZeroId,
- startDealerPlayerId NonZeroId,
- gameStartMode CHOICE {
- gameStartModeInitial [0] GameStartModeInitial,
- gameStartModeRejoin [1] GameStartModeRejoin
- }
-}
-
-PlainCards ::= SEQUENCE {
- plainCard1 Card,
- plainCard2 Card
-}
-
-EncryptedCards ::= SEQUENCE {
- cardData OCTET STRING (SIZE(16..64))
-}
-
-HandStartMessage ::= [APPLICATION 23] SEQUENCE {
- gameId NonZeroId,
- yourCards CHOICE {
- plainCards [0] PlainCards,
- encryptedCards [1] EncryptedCards
- },
- smallBlind INTEGER(1..100000000),
- seatStates SEQUENCE SIZE(2..10) OF NetPlayerState
-}
-
-PlayersTurnMessage ::= [APPLICATION 24] SEQUENCE {
- gameId NonZeroId,
- playerId NonZeroId,
- gameState NetGameState
-}
-
-MyActionRequestMessage ::= [APPLICATION 25] SEQUENCE {
- gameId NonZeroId,
- handNum NonZeroId,
- gameState NetGameState,
- myAction NetPlayerAction,
- myRelativeBet AmountOfMoney
-}
-
-YourActionRejectedMessage ::= [APPLICATION 26] SEQUENCE {
- gameId NonZeroId,
- gameState NetGameState,
- yourAction NetPlayerAction,
- yourRelativeBet AmountOfMoney,
- rejectionReason ENUMERATED {
- rejectedInvalidGameState (1),
- rejectedNotYourTurn (2),
- rejectedActionNotAllowed (3)
- }
-}
-
-PlayersActionDoneMessage ::= [APPLICATION 27] SEQUENCE {
- gameId NonZeroId,
- playerId NonZeroId,
- gameState NetGameState,
- playerAction NetPlayerAction,
- totalPlayerBet AmountOfMoney,
- playerMoney AmountOfMoney,
- highestSet AmountOfMoney,
- minimumRaise AmountOfMoney
-}
-
-DealFlopCardsMessage ::= [APPLICATION 28] SEQUENCE {
- gameId NonZeroId,
- flopCard1 Card,
- flopCard2 Card,
- flopCard3 Card
-}
-
-DealTurnCardMessage ::= [APPLICATION 29] SEQUENCE {
- gameId NonZeroId,
- turnCard Card
-}
-
-DealRiverCardMessage ::= [APPLICATION 30] SEQUENCE {
- gameId NonZeroId,
- riverCard Card
-}
-
-AllInShowCardsMessage ::= [APPLICATION 31] SEQUENCE {
- gameId NonZeroId,
- playersAllIn SEQUENCE SIZE(1..10) OF PlayerAllIn
-}
-
-PlayerAllIn ::= SEQUENCE {
- playerId NonZeroId,
- allInCard1 Card,
- allInCard2 Card
-}
-
-EndOfHandMessage ::= [APPLICATION 32] SEQUENCE {
- gameId NonZeroId,
- endOfHandType CHOICE {
- endOfHandShowCards [0] EndOfHandShowCards,
- endOfHandHideCards [1] EndOfHandHideCards
- }
-}
-
-EndOfHandShowCards ::= SEQUENCE {
- playerResults SEQUENCE SIZE(1..10) OF PlayerResult
-}
-
-PlayerResult ::= SEQUENCE {
- playerId NonZeroId,
- resultCard1 Card,
- resultCard2 Card,
- bestHandPosition SEQUENCE SIZE(5) OF INTEGER, -- TODO size restrictions
- moneyWon AmountOfMoney,
- playerMoney AmountOfMoney,
- cardsValue INTEGER OPTIONAL
-}
-
-EndOfHandHideCards ::= SEQUENCE {
- playerId NonZeroId,
- moneyWon AmountOfMoney,
- playerMoney AmountOfMoney
-}
-
-ShowMyCardsRequestMessage ::= [APPLICATION 33] SEQUENCE {
-}
-
-AfterHandShowCardsMessage ::= [APPLICATION 34] SEQUENCE {
- playerResult PlayerResult
-}
-
-EndOfGameMessage ::= [APPLICATION 35] SEQUENCE {
- gameId NonZeroId,
- winnerPlayerId NonZeroId
-}
-
-PlayerIdChangedMessage ::= [APPLICATION 36] SEQUENCE {
- oldPlayerId NonZeroId,
- newPlayerId NonZeroId
-}
-
-AskKickPlayerMessage ::= [APPLICATION 64] SEQUENCE {
- gameId NonZeroId,
- playerId NonZeroId
-}
-
-AskKickDeniedMessage ::= [APPLICATION 65] SEQUENCE {
- gameId NonZeroId,
- playerId NonZeroId,
- kickDeniedReason ENUMERATED {
- kickDeniedInvalidGameState (0),
- kickDeniedNotPossible (1),
- kickDeniedTryAgainLater (2),
- kickDeniedAlreadyInProgress (3),
- kickDeniedInvalidPlayerId (4)
- }
-}
-
-StartKickPetitionMessage ::= [APPLICATION 66] SEQUENCE {
- gameId NonZeroId,
- petitionId NonZeroId,
- proposingPlayerId NonZeroId,
- kickPlayerId NonZeroId,
- kickTimeoutSec INTEGER(1..120),
- numVotesNeededToKick INTEGER(1..9)
-}
-
-VoteKickRequestMessage ::= [APPLICATION 67] SEQUENCE {
- gameId NonZeroId,
- petitionId NonZeroId,
- voteKick BOOLEAN
-}
-
-VoteKickReplyMessage ::= [APPLICATION 68] SEQUENCE {
- gameId NonZeroId,
- petitionId NonZeroId,
- voteKickReplyType CHOICE {
- voteKickAck [0] VoteKickAck,
- voteKickDenied [1] VoteKickDenied
- }
-}
-
-VoteKickAck ::= SEQUENCE {
-}
-
-VoteKickDenied ::= SEQUENCE {
- voteKickDeniedReason ENUMERATED {
- voteKickDeniedInvalid (0),
- voteKickDeniedAlreadyVoted (1)
- }
-}
-
-KickPetitionUpdateMessage ::= [APPLICATION 69] SEQUENCE {
- gameId NonZeroId,
- petitionId NonZeroId,
- numVotesAgainstKicking INTEGER(0..9),
- numVotesInFavourOfKicking INTEGER(1..9),
- numVotesNeededToKick INTEGER(1..9)
-}
-
-EndKickPetitionMessage ::= [APPLICATION 70] SEQUENCE {
- gameId NonZeroId,
- petitionId NonZeroId,
- numVotesAgainstKicking INTEGER(0..9),
- numVotesInFavourOfKicking INTEGER(1..9),
- resultPlayerKicked BOOLEAN,
- petitionEndReason ENUMERATED {
- petitionEndEnoughVotes (0),
- petitionEndTooFewPlayers (1),
- petitionEndPlayerLeft (2),
- petitionEndTimeout (3)
- }
-}
-
-StatisticsMessage ::= [APPLICATION 128] SEQUENCE {
- statisticsData SEQUENCE SIZE(1..32) OF StatisticsData
-}
-
-StatisticsData ::= SEQUENCE {
- statisticsType ENUMERATED {
- statNumberOfPlayers (1)
- },
- statisticsValue INTEGER
-}
-
-ChatRequestMessage ::= [APPLICATION 129] SEQUENCE {
- chatRequestType CHOICE {
- chatRequestTypeLobby [0] ChatRequestTypeLobby,
- chatRequestTypeGame [1] ChatRequestTypeGame,
- chatRequestTypePrivate [2] ChatRequestTypePrivate
- },
- chatText UTF8String (SIZE(1..128))
-}
-
-ChatRequestTypeLobby ::= SEQUENCE {
-}
-
-ChatRequestTypeGame ::= SEQUENCE {
- gameId NonZeroId
-}
-
-ChatRequestTypePrivate ::= SEQUENCE {
- targetPlayerId NonZeroId
-}
-
-ChatMessage ::= [APPLICATION 130] SEQUENCE {
- chatType CHOICE {
- chatTypeLobby [0] ChatTypeLobby,
- chatTypeGame [1] ChatTypeGame,
- chatTypeBot [2] ChatTypeBot,
- chatTypeBroadcast [3] ChatTypeBroadcast,
- chatTypePrivate [4] ChatTypePrivate
- },
- chatText UTF8String (SIZE(1..128))
-}
-
-ChatTypeLobby ::= SEQUENCE {
- playerId NonZeroId
-}
-
-ChatTypeGame ::= SEQUENCE {
- gameId NonZeroId,
- playerId NonZeroId
-}
-
-ChatTypeBroadcast ::= SEQUENCE {
-}
-
-ChatTypeBot ::= SEQUENCE {
-}
-
-ChatTypePrivate ::= SEQUENCE {
- playerId NonZeroId
-}
-
-ChatRejectMessage ::= [APPLICATION 131] SEQUENCE {
- chatText UTF8String (SIZE(1..128))
-}
-
-DialogMessage ::= [APPLICATION 132] SEQUENCE {
- notificationText UTF8String (SIZE(1..128))
-}
-
-TimeoutWarningMessage ::= [APPLICATION 133] SEQUENCE {
- timeoutReason ENUMERATED {
- timeoutNoDataReceived (0),
- timeoutInactiveGame (1),
- timeoutKickAfterAutofold (2)
- },
- remainingSeconds INTEGER
-}
-
-ResetTimeoutMessage ::= [APPLICATION 134] SEQUENCE {
-}
-
-ReportAvatarMessage ::= [APPLICATION 135] SEQUENCE {
- reportedPlayerId NonZeroId,
- reportedAvatar AvatarHash
-}
-
-ReportAvatarAckMessage ::= [APPLICATION 136] SEQUENCE {
- reportedPlayerId NonZeroId,
- reportAvatarResult ENUMERATED {
- avatarReportAccepted (0),
- avatarReportDuplicate (1),
- avatarReportInvalid (2)
- }
-}
-
-ReportGameMessage ::= [APPLICATION 137] SEQUENCE {
- reportedGameId NonZeroId
-}
-
-ReportGameAckMessage ::= [APPLICATION 138] SEQUENCE {
- reportedGameId NonZeroId,
- reportGameResult ENUMERATED {
- gameReportAccepted (0),
- gameReportDuplicate (1),
- gameReportInvalid (2)
- }
-}
-
-ErrorMessage ::= [APPLICATION 255] SEQUENCE {
- errorReason ENUMERATED {
- errorReserved (0),
- errorInitVersionNotSupported (1),
- errorInitServerFull (2),
- errorInitAuthFailure (3),
- errorInitPlayerNameInUse (4),
- errorInitInvalidPlayerName (5),
- errorInitServerMaintenance (6),
- errorInitBlocked (7),
- errorAvatarTooLarge (8),
- errorInvalidPacket (256),
- errorInvalidState (257),
- errorKickedFromServer (258),
- errorBannedFromServer (259),
- errorBlockedByServer (260),
- errorSessionTimeout (261)
- }
-}
-
-NetGameState ::= ENUMERATED {
- statePreflop (0),
- stateFlop (1),
- stateTurn (2),
- stateRiver (3),
- statePreflopSmallBlind (4),
- statePreflopBigBlind (5)
-}
-
-NetPlayerAction ::= ENUMERATED {
- actionNone (0),
- actionFold (1),
- actionCheck (2),
- actionCall (3),
- actionBet (4),
- actionRaise (5),
- actionAllIn (6)
-}
-
-NetPlayerState ::= ENUMERATED {
- playerStateNormal (0),
- playerStateSessionInactive (1),
- playerStateNoMoney (2)
-}
-
-NonZeroId ::= INTEGER(1..4294967295)
-
-Id ::= INTEGER(0..4294967295)
-
-Guid ::= OCTET STRING (SIZE(16))
-
-Card ::= INTEGER(0..51)
-
-AmountOfMoney ::= INTEGER(0..10000000)
-InitialAmountOfMoney ::= INTEGER(0..1000000)
-InitialNonZeroAmountOfMoney ::= INTEGER(1..1000000)
-
-END
diff --git a/pokerth_db.pro b/pokerth_db.pro
index b610fce2..7c2d1428 100644
--- a/pokerth_db.pro
+++ b/pokerth_db.pro
@@ -64,7 +64,8 @@ mac{
# on Intel-Mac you have to comment this line out or build will fail.
# QMAKE_MAC_SDK=/Developer/SDKs/MacOSX10.4u.sdk/
- INCLUDEPATH += /Developer/SDKs/MacOSX10.6.sdk/usr/include/
+ INCLUDEPATH += /Developer/SDKs/MacOSX10.6.sdk/usr/include/
INCLUDEPATH += /Library/Frameworks/SDL.framework/Headers
INCLUDEPATH += /Library/Frameworks/SDL_mixer.framework/Headers
+ INCLUDEPATH += /usr/local/include
}
diff --git a/pokerth_game.pro b/pokerth_game.pro
index f0239ba8..e8b164de 100644
--- a/pokerth_game.pro
+++ b/pokerth_game.pro
@@ -43,7 +43,6 @@ INCLUDEPATH += . \
src/engine/local_engine \
src/engine/network_engine \
src/config \
- src/third_party/asn1 \
src/gui/qt \
src/gui/qt/connecttoserverdialog \
src/core \
@@ -598,6 +597,7 @@ mac {
INCLUDEPATH += /Developer/SDKs/MacOSX10.6.sdk/usr/include/
INCLUDEPATH += /Library/Frameworks/SDL.framework/Headers
INCLUDEPATH += /Library/Frameworks/SDL_mixer.framework/Headers
+ INCLUDEPATH += /usr/local/include
}
OTHER_FILES += docs/infomessage-id-desc.txt
official_server {
diff --git a/pokerth_lib.pro b/pokerth_lib.pro
index f58b9199..9a30d60c 100644
--- a/pokerth_lib.pro
+++ b/pokerth_lib.pro
@@ -27,7 +27,6 @@ INCLUDEPATH += . \
src/engine/local_engine \
src/engine/network_engine \
src/config \
- src/third_party/asn1 \
src/core
DEPENDPATH += . \
@@ -100,7 +99,6 @@ HEADERS += \
src/net/uploadhelper.h \
src/net/downloaderthread.h \
src/net/downloadhelper.h \
- src/net/internalchatcleanerpacket.h \
src/engine/local_engine/cardsvalue.h \
src/engine/local_engine/localboard.h \
src/engine/local_engine/localenginefactory.h \
@@ -201,7 +199,6 @@ SOURCES += \
src/net/common/transferhelper.cpp \
src/net/common/uploaderthread.cpp \
src/net/common/uploadhelper.cpp \
- src/net/common/internalchatcleanerpacket.cpp \
src/gui/generic/serverguiwrapper.cpp \
src/gui/qttoolsinterface.cpp \
src/net/common/sendbuffer.cpp \
@@ -250,7 +247,7 @@ mac{
INCLUDEPATH += /Developer/SDKs/MacOSX10.6.sdk/usr/include/
INCLUDEPATH += /Library/Frameworks/SDL.framework/Headers
INCLUDEPATH += /Library/Frameworks/SDL_mixer.framework/Headers
- INCLUDEPATH += /opt/local/include
+ INCLUDEPATH += /usr/local/include
}
android{
diff --git a/pokerth_protocol.pro b/pokerth_protocol.pro
index 4b1be2bf..7a331df5 100644
--- a/pokerth_protocol.pro
+++ b/pokerth_protocol.pro
@@ -18,96 +18,24 @@ QT -= core \
# PRECOMPILED_HEADER = src/pch_lib.h
INCLUDEPATH += . \
- src \
- src/third_party/asn1
+ src
DEPENDPATH += . \
- src \
- src/third_party/asn1
+ src
# Input
-HEADERS += src/third_party/asn1/asn_application.h \
- src/third_party/asn1/asn_codecs.h \
- src/third_party/asn1/asn_codecs_prim.h \
- src/third_party/asn1/asn_internal.h \
- src/third_party/asn1/asn_SEQUENCE_OF.h \
- src/third_party/asn1/asn_SET_OF.h \
- src/third_party/asn1/asn_system.h \
- src/third_party/asn1/ber_decoder.h \
- src/third_party/asn1/ber_tlv_length.h \
- src/third_party/asn1/ber_tlv_tag.h \
- src/third_party/asn1/BIT_STRING.h \
- src/third_party/asn1/BOOLEAN.h \
- src/third_party/asn1/constraints.h \
- src/third_party/asn1/constr_CHOICE.h \
- src/third_party/asn1/constr_SEQUENCE.h \
- src/third_party/asn1/constr_SEQUENCE_OF.h \
- src/third_party/asn1/constr_SET_OF.h \
- src/third_party/asn1/constr_TYPE.h \
- src/third_party/asn1/der_encoder.h \
- src/third_party/asn1/INTEGER.h \
- src/third_party/asn1/NativeEnumerated.h \
- src/third_party/asn1/NativeInteger.h \
- src/third_party/asn1/OCTET_STRING.h \
- src/third_party/asn1/per_decoder.h \
- src/third_party/asn1/per_encoder.h \
- src/third_party/asn1/per_opentype.h \
- src/third_party/asn1/per_support.h \
- src/third_party/asn1/UTF8String.h \
- src/third_party/asn1/xer_decoder.h \
- src/third_party/asn1/xer_encoder.h \
- src/third_party/asn1/xer_support.h \
- src/third_party/asn1/ChatCleanerMessage.h \
- src/third_party/asn1/CleanerChatTypeLobby.h \
- src/third_party/asn1/CleanerChatTypeGame.h \
- src/third_party/asn1/CleanerChatType.h \
- src/third_party/asn1/CleanerInitMessage.h \
- src/third_party/asn1/CleanerInitAckMessage.h \
- src/third_party/asn1/CleanerChatRequestMessage.h \
- src/third_party/asn1/CleanerChatReplyMessage.h
-HEADERS += src/third_party/protobuf/pokerth.pb.h
-SOURCES += src/third_party/asn1/ChatCleanerMessage.c \
- src/third_party/asn1/CleanerChatTypeLobby.c \
- src/third_party/asn1/CleanerChatTypeGame.c \
- src/third_party/asn1/CleanerChatType.c \
- src/third_party/asn1/CleanerInitMessage.c \
- src/third_party/asn1/CleanerInitAckMessage.c \
- src/third_party/asn1/CleanerChatRequestMessage.c \
- src/third_party/asn1/CleanerChatReplyMessage.c \
- src/third_party/asn1/xer_support.c \
- src/third_party/asn1/xer_encoder.c \
- src/third_party/asn1/xer_decoder.c \
- src/third_party/asn1/UTF8String.c \
- src/third_party/asn1/per_support.c \
- src/third_party/asn1/per_opentype.c \
- src/third_party/asn1/per_encoder.c \
- src/third_party/asn1/per_decoder.c \
- src/third_party/asn1/OCTET_STRING.c \
- src/third_party/asn1/NativeInteger.c \
- src/third_party/asn1/NativeEnumerated.c \
- src/third_party/asn1/INTEGER.c \
- src/third_party/asn1/der_encoder.c \
- src/third_party/asn1/constraints.c \
- src/third_party/asn1/constr_TYPE.c \
- src/third_party/asn1/constr_SET_OF.c \
- src/third_party/asn1/constr_SEQUENCE_OF.c \
- src/third_party/asn1/constr_SEQUENCE.c \
- src/third_party/asn1/constr_CHOICE.c \
- src/third_party/asn1/BOOLEAN.c \
- src/third_party/asn1/BIT_STRING.c \
- src/third_party/asn1/ber_tlv_tag.c \
- src/third_party/asn1/ber_tlv_length.c \
- src/third_party/asn1/ber_decoder.c \
- src/third_party/asn1/asn_SET_OF.c \
- src/third_party/asn1/asn_SEQUENCE_OF.c \
- src/third_party/asn1/asn_codecs_prim.c
-SOURCES += src/third_party/protobuf/pokerth.pb.cc
-win32 {
+
+HEADERS += src/third_party/protobuf/pokerth.pb.h \
+ src/third_party/protobuf/chatcleaner.pb.h
+SOURCES += src/third_party/protobuf/pokerth.pb.cc \
+ src/third_party/protobuf/chatcleaner.pb.cc
+win32 {
DEFINES += CURL_STATICLIB
DEFINES += _WIN32_WINNT=0x0501
}
unix : !mac {
INCLUDEPATH += $${PREFIX}/include
system(protoc pokerth.proto --cpp_out=src/third_party/protobuf)
+ system(protoc chatcleaner.proto --cpp_out=src/third_party/protobuf)
system(protoc pokerth.proto --java_out=tests/src)
}
mac {
@@ -120,7 +48,8 @@ mac {
# for universal-compilation on PPC-Mac uncomment the following line
# on Intel-Mac you have to comment this line out or build will fail.
# QMAKE_MAC_SDK=/Developer/SDKs/MacOSX10.4u.sdk/
- INCLUDEPATH += /Developer/SDKs/MacOSX10.6.sdk/usr/include/
+ INCLUDEPATH += /Developer/SDKs/MacOSX10.6.sdk/usr/include/
INCLUDEPATH += /Library/Frameworks/SDL.framework/Headers
INCLUDEPATH += /Library/Frameworks/SDL_mixer.framework/Headers
+ INCLUDEPATH += /usr/local/include
}
diff --git a/pokerth_server.pro b/pokerth_server.pro
index 822d03e9..d27a0e77 100644
--- a/pokerth_server.pro
+++ b/pokerth_server.pro
@@ -30,7 +30,6 @@ INCLUDEPATH += . \
src/engine/local_engine \
src/engine/network_engine \
src/config \
- src/third_party/asn1 \
src/core \
DEPENDPATH += . \
@@ -316,6 +315,7 @@ mac {
RC_FILE = pokerth.icns
LIBPATH += /Developer/SDKs/MacOSX10.6.sdk/usr/lib
INCLUDEPATH += /Developer/SDKs/MacOSX10.6.sdk/usr/include/
+ INCLUDEPATH += /usr/local/include
}
official_server {
diff --git a/src/chatcleaner/cleanerconfig.cpp b/src/chatcleaner/cleanerconfig.cpp
index cee11f61..26492dbc 100644
--- a/src/chatcleaner/cleanerconfig.cpp
+++ b/src/chatcleaner/cleanerconfig.cpp
@@ -29,6 +29,8 @@
* as that of the covered work. *
*****************************************************************************/
#include "cleanerconfig.h"
+#include
+
#include
#define MODUS 0711
@@ -46,8 +48,6 @@
#include
#include
-#include
-
using namespace std;
diff --git a/src/chatcleaner/cleanerserver.cpp b/src/chatcleaner/cleanerserver.cpp
index 34066149..52ade363 100644
--- a/src/chatcleaner/cleanerserver.cpp
+++ b/src/chatcleaner/cleanerserver.cpp
@@ -32,9 +32,10 @@
#include
#include
+#include
#include
#include
-#include
+#include
#include "messagefilter.h"
#include "cleanerconfig.h"
@@ -82,6 +83,7 @@ void CleanerServer::newCon()
connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(onRead()));
connect(tcpSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(socketStateChanged(QAbstractSocket::SocketState)));
blockConnection = true;
+ tcpServer->pauseAccepting();
}
}
@@ -91,23 +93,38 @@ void CleanerServer::onRead()
bool error = bytesRead < 1;
if (!error) {
m_recvBufUsed += bytesRead;
-
- asn_dec_rval_t retVal;
+ bool valid;
do {
- // Try to decode the packets.
- InternalChatCleanerPacket recvMsg;
- retVal = ber_decode(0, &asn_DEF_ChatCleanerMessage, (void **)recvMsg.GetMsgPtr(), m_recvBuf, m_recvBufUsed);
- if(retVal.code == RC_OK) {
- if (retVal.consumed < m_recvBufUsed) {
- m_recvBufUsed -= retVal.consumed;
- memmove(m_recvBuf, m_recvBuf + retVal.consumed, m_recvBufUsed);
- } else
+ valid = false;
+ if (m_recvBufUsed >= CLEANER_NET_HEADER_SIZE) {
+ // Read the size of the packet (first 4 bytes in network byte order).
+ uint32_t nativeVal;
+ memcpy(&nativeVal, &m_recvBuf[0], sizeof(uint32_t));
+ size_t packetSize = qFromBigEndian(nativeVal);
+ if (packetSize > MAX_CLEANER_PACKET_SIZE) {
m_recvBufUsed = 0;
-
- // Handle the packets.
- error = handleMessage(recvMsg);
+ qDebug() << "Invalid packet size: " << packetSize;
+ } else if (m_recvBufUsed >= packetSize + CLEANER_NET_HEADER_SIZE) {
+ try {
+ // Try to decode the packet.
+ boost::shared_ptr recvMsg(ChatCleanerMessage::default_instance().New());
+ if (recvMsg->ParseFromArray(&m_recvBuf[CLEANER_NET_HEADER_SIZE], static_cast(packetSize))) {
+ m_recvBufUsed -= (packetSize + CLEANER_NET_HEADER_SIZE);
+ if (m_recvBufUsed) {
+ memmove(m_recvBuf, m_recvBuf + packetSize + CLEANER_NET_HEADER_SIZE, m_recvBufUsed);
+ }
+ }
+ // Handle the packet.
+ error = handleMessage(*recvMsg);
+ valid = true;
+ } catch (const exception &e) {
+ // Reset buffer on error.
+ m_recvBufUsed = 0;
+ qDebug() << "Exception while decoding packet: " << e.what();
+ }
+ }
}
- } while (!error && retVal.code == RC_OK);
+ } while (valid && !error);
}
if (error) {
@@ -128,71 +145,58 @@ void CleanerServer::onRead()
tcpSocket->write(checkMessage.toAscii().data(), checkMessage.length());*/
}
-bool CleanerServer::handleMessage(InternalChatCleanerPacket &msg)
+bool CleanerServer::handleMessage(ChatCleanerMessage &msg)
{
bool error = true;
- if (msg.GetMsg()->present == ChatCleanerMessage_PR_cleanerInitMessage) {
- CleanerInitMessage_t *netInit = &msg.GetMsg()->choice.cleanerInitMessage;
- if (netInit->requestedVersion == CLEANER_PROTOCOL_VERSION) {
- string tmpClientSecret((const char *)netInit->clientSecret.buf, netInit->clientSecret.size);
- if (clientSecret == QString::fromStdString(tmpClientSecret)) {
+ if (msg.messagetype() == ChatCleanerMessage::Type_CleanerInitMessage) {
+ const CleanerInitMessage &netInit = msg.cleanerinitmessage();
+ if (netInit.requestedversion() == CLEANER_PROTOCOL_VERSION) {
+ if (clientSecret == QString::fromStdString(netInit.clientsecret())) {
error = false;
- InternalChatCleanerPacket tmpAck;
- tmpAck.GetMsg()->present = ChatCleanerMessage_PR_cleanerInitAckMessage;
- CleanerInitAckMessage_t *netAck = &tmpAck.GetMsg()->choice.cleanerInitAckMessage;
- netAck->serverVersion = CLEANER_PROTOCOL_VERSION;
- string tmpServerSecret(serverSecret.toStdString());
- OCTET_STRING_fromBuf(&netAck->serverSecret,
- tmpServerSecret.c_str(),
- tmpServerSecret.length());
- sendMessageToClient(tmpAck);
+ boost::shared_ptr tmpAck(ChatCleanerMessage::default_instance().New());
+ tmpAck->set_messagetype(ChatCleanerMessage::Type_CleanerInitAckMessage);
+ CleanerInitAckMessage *netAck = tmpAck->mutable_cleanerinitackmessage();
+ netAck->set_serverversion(CLEANER_PROTOCOL_VERSION);
+ netAck->set_serversecret(serverSecret.toStdString());
+ sendMessageToClient(*tmpAck);
} else
qDebug() << "Invalid client secret.";
} else
- qDebug() << "Invalid client version: " << netInit->requestedVersion;
- } else if (msg.GetMsg()->present == ChatCleanerMessage_PR_cleanerChatRequestMessage) {
+ qDebug() << "Invalid client version: " << netInit.requestedversion();
+ } else if (msg.messagetype() == ChatCleanerMessage::Type_CleanerChatRequestMessage) {
error = false;
- CleanerChatRequestMessage_t *netRequest = &msg.GetMsg()->choice.cleanerChatRequestMessage;
- unsigned playerId = netRequest->playerId;
- QString nick(QString::fromUtf8(
- string((const char *)netRequest->playerName.buf, netRequest->playerName.size).c_str()));
- QString message(QString::fromUtf8(
- string((const char *)netRequest->chatMessage.buf, netRequest->chatMessage.size).c_str()));
- unsigned gameId = 0;
- if (netRequest->cleanerChatType.present == CleanerChatType_PR_cleanerChatTypeGame) {
- gameId = netRequest->cleanerChatType.choice.cleanerChatTypeGame.gameId;
- }
+ const CleanerChatRequestMessage &netRequest = msg.cleanerchatrequestmessage();
+ unsigned playerId = netRequest.playerid();
+ QString nick(QString::fromUtf8(netRequest.playername().c_str()));
+ QString message(QString::fromUtf8(netRequest.chatmessage().c_str()));
+ unsigned gameId = netRequest.gameid();
QStringList checkreturn = myMessageFilter->check(gameId, playerId, nick, message);
QString checkAction = checkreturn.at(0);
QString checkMessage = checkreturn.at(1);
if (!checkAction.isEmpty()) {
- InternalChatCleanerPacket tmpReply;
- tmpReply.GetMsg()->present = ChatCleanerMessage_PR_cleanerChatReplyMessage;
- CleanerChatReplyMessage_t *netReply = &tmpReply.GetMsg()->choice.cleanerChatReplyMessage;
- netReply->requestId = netRequest->requestId;
- netReply->cleanerChatType = netRequest->cleanerChatType;
- netReply->playerId = netRequest->playerId;
+ boost::shared_ptr tmpReply(ChatCleanerMessage::default_instance().New());
+ tmpReply->set_messagetype(ChatCleanerMessage::Type_CleanerChatReplyMessage);
+ CleanerChatReplyMessage *netReply = tmpReply->mutable_cleanerchatreplymessage();
+ netReply->set_requestid(netRequest.requestid());
+ netReply->set_gameid(netRequest.gameid());
+ netReply->set_cleanerchattype(netRequest.cleanerchattype());
+ netReply->set_playerid(netRequest.playerid());
if(checkAction == "warn") {
- netReply->cleanerActionType = cleanerActionType_cleanerActionWarning;
+ netReply->set_cleaneractiontype(CleanerChatReplyMessage_CleanerActionType_cleanerActionWarning);
} else if (checkAction == "kick") {
- netReply->cleanerActionType = cleanerActionType_cleanerActionKick;
+ netReply->set_cleaneractiontype(CleanerChatReplyMessage_CleanerActionType_cleanerActionKick);
} else if (checkAction == "kickban") {
- netReply->cleanerActionType = cleanerActionType_cleanerActionBan;
+ netReply->set_cleaneractiontype(CleanerChatReplyMessage_CleanerActionType_cleanerActionBan);
} else if (checkAction == "mute") {
- netReply->cleanerActionType = cleanerActionType_cleanerActionMute;
+ netReply->set_cleaneractiontype(CleanerChatReplyMessage_CleanerActionType_cleanerActionMute);
}
- string tmpCheck(checkMessage.toUtf8());
- netReply->cleanerText =
- OCTET_STRING_new_fromBuf(
- &asn_DEF_OCTET_STRING,
- (const char *)tmpCheck.c_str(),
- tmpCheck.length());
- sendMessageToClient(tmpReply);
+ netReply->set_cleanertext(checkMessage.toUtf8());
+ sendMessageToClient(*tmpReply);
}
}
return error;
@@ -200,9 +204,11 @@ bool CleanerServer::handleMessage(InternalChatCleanerPacket &msg)
void CleanerServer::socketStateChanged(QAbstractSocket::SocketState state)
{
-
- qDebug() << "Socket state changed to: " << QAbstractSocket::UnconnectedState;
- if(state == QAbstractSocket::UnconnectedState) blockConnection = false;
+ qDebug() << "Socket state changed to: " << state;
+ if (state == QAbstractSocket::UnconnectedState) {
+ blockConnection = false;
+ tcpServer->resumeAccepting();
+ }
}
void CleanerServer::refreshConfig()
@@ -217,14 +223,13 @@ void CleanerServer::refreshConfig()
myMessageFilter->refreshConfig();
}
-void CleanerServer::sendMessageToClient(InternalChatCleanerPacket &msg)
+void CleanerServer::sendMessageToClient(ChatCleanerMessage &msg)
{
- unsigned char buf[MAX_CLEANER_PACKET_SIZE];
- asn_enc_rval_t e = der_encode_to_buffer(&asn_DEF_ChatCleanerMessage, msg.GetMsg(), buf, MAX_CLEANER_PACKET_SIZE);
-
- if (e.encoded == -1)
- qDebug() << "Failed to encode chat cleaner packet: " << msg.GetMsg()->present;
- else
- tcpSocket->write((const char *)buf, e.encoded);
+ uint32_t packetSize = msg.ByteSize();
+ google::protobuf::uint8 *buf = new google::protobuf::uint8[packetSize + CLEANER_NET_HEADER_SIZE];
+ *((uint32_t *)buf) = qToBigEndian(packetSize);
+ msg.SerializeWithCachedSizesToArray(&buf[CLEANER_NET_HEADER_SIZE]);
+ tcpSocket->write((const char *)buf, packetSize + CLEANER_NET_HEADER_SIZE);
+ delete[] buf;
}
diff --git a/src/chatcleaner/cleanerserver.h b/src/chatcleaner/cleanerserver.h
index c72fb67f..568dacfa 100644
--- a/src/chatcleaner/cleanerserver.h
+++ b/src/chatcleaner/cleanerserver.h
@@ -33,10 +33,14 @@
#include
#include
-#include
+
+#define CLEANER_NET_HEADER_SIZE 4
+#define MAX_CLEANER_PACKET_SIZE 512
+#define CLEANER_PROTOCOL_VERSION 2
class MessageFilter;
class CleanerConfig;
+class ChatCleanerMessage;
class CleanerServer: public QObject
{
@@ -49,10 +53,10 @@ public:
private slots:
void newCon();
void onRead();
- bool handleMessage(InternalChatCleanerPacket &msg);
+ bool handleMessage(ChatCleanerMessage &msg);
void socketStateChanged(QAbstractSocket::SocketState);
void refreshConfig();
- void sendMessageToClient(InternalChatCleanerPacket &msg);
+ void sendMessageToClient(ChatCleanerMessage &msg);
private:
QTcpServer *tcpServer;
@@ -66,7 +70,7 @@ private:
QString serverSecret;
unsigned char m_recvBuf[2*MAX_CLEANER_PACKET_SIZE];
- unsigned m_recvBufUsed;
+ size_t m_recvBufUsed;
int secondsSinceLastConfigChange;
};
diff --git a/src/chatcleaner/messagefilter.h b/src/chatcleaner/messagefilter.h
index cabb5bac..f26023b7 100644
--- a/src/chatcleaner/messagefilter.h
+++ b/src/chatcleaner/messagefilter.h
@@ -33,7 +33,9 @@
#include
#include
+#ifndef Q_MOC_RUN
#include
+#endif
class BadWordCheck;
class TextFloodCheck;
diff --git a/src/chatcleaner/textfloodcheck.h b/src/chatcleaner/textfloodcheck.h
index 229cf145..29b3cf38 100644
--- a/src/chatcleaner/textfloodcheck.h
+++ b/src/chatcleaner/textfloodcheck.h
@@ -32,7 +32,9 @@
#define TEXTFLOODCHECK_H
#include
+#ifndef Q_MOC_RUN
#include
+#endif
#include
diff --git a/src/config/configfile.h b/src/config/configfile.h
index e7df2cae..7f771911 100644
--- a/src/config/configfile.h
+++ b/src/config/configfile.h
@@ -35,7 +35,9 @@
#include
#include
+#ifndef Q_MOC_RUN
#include
+#endif
enum ConfigState { NONEXISTING, OLD, OK };
enum ConfigType { CONFIG_TYPE_INT, CONFIG_TYPE_STRING, CONFIG_TYPE_INT_LIST, CONFIG_TYPE_STRING_LIST };
diff --git a/src/gamedata.h b/src/gamedata.h
index e1bf502b..a5e3e0d5 100644
--- a/src/gamedata.h
+++ b/src/gamedata.h
@@ -35,8 +35,9 @@
#include
#include
+#ifndef Q_MOC_RUN
#include
-
+#endif
typedef std::list PlayerIdList;
diff --git a/src/gui/qt/gametable/gametableimpl.h b/src/gui/qt/gametable/gametableimpl.h
index bea8e5f9..71b6338e 100755
--- a/src/gui/qt/gametable/gametableimpl.h
+++ b/src/gui/qt/gametable/gametableimpl.h
@@ -40,7 +40,10 @@
#include "game_defs.h"
#include
+
+#ifndef Q_MOC_RUN
#include
+#endif
#include
#include
diff --git a/src/gui/qt/gametable/mytimeoutlabel.h b/src/gui/qt/gametable/mytimeoutlabel.h
index 05f29596..8ceb9a14 100644
--- a/src/gui/qt/gametable/mytimeoutlabel.h
+++ b/src/gui/qt/gametable/mytimeoutlabel.h
@@ -35,7 +35,9 @@
#include
#include
+#ifndef Q_MOC_RUN
#include
+#endif
#if QT_VERSION >= 0x050000
#include
#endif
diff --git a/src/gui/qt/timeoutmsgbox/timeoutmsgboximpl.h b/src/gui/qt/timeoutmsgbox/timeoutmsgboximpl.h
index c296cb07..50f2d66c 100644
--- a/src/gui/qt/timeoutmsgbox/timeoutmsgboximpl.h
+++ b/src/gui/qt/timeoutmsgbox/timeoutmsgboximpl.h
@@ -37,7 +37,9 @@
#if QT_VERSION >= 0x050000
#include
#endif
+#ifndef Q_MOC_RUN
#include
+#endif
#include "game_defs.h"
/**
diff --git a/src/net/chatcleanermanager.h b/src/net/chatcleanermanager.h
index d321741e..6a14d3d3 100644
--- a/src/net/chatcleanermanager.h
+++ b/src/net/chatcleanermanager.h
@@ -37,9 +37,13 @@
#include
#include
#include
-#include
+
+#define CLEANER_NET_HEADER_SIZE 4
+#define MAX_CLEANER_PACKET_SIZE 512
+#define CLEANER_PROTOCOL_VERSION 2
class SendBuffer;
+class ChatCleanerMessage;
class ChatCleanerManager : public boost::enable_shared_from_this
{
@@ -58,9 +62,9 @@ protected:
void HandleResolve(const boost::system::error_code& ec, boost::asio::ip::tcp::resolver::iterator endpoint_iterator);
void HandleConnect(const boost::system::error_code& ec, boost::asio::ip::tcp::resolver::iterator endpoint_iterator);
void HandleRead(const boost::system::error_code &ec, size_t bytesRead);
- bool HandleMessage(InternalChatCleanerPacket &msg);
+ bool HandleMessage(ChatCleanerMessage &msg);
- void SendMessageToServer(InternalChatCleanerPacket &msg);
+ void SendMessageToServer(ChatCleanerMessage &msg);
unsigned GetNextRequestId();
private:
diff --git a/src/net/common/chatcleanermanager.cpp b/src/net/common/chatcleanermanager.cpp
index bf360c1d..fb6ba8fe 100644
--- a/src/net/common/chatcleanermanager.cpp
+++ b/src/net/common/chatcleanermanager.cpp
@@ -33,7 +33,7 @@
#include
#include
#include
-#include
+#include
#include
@@ -98,24 +98,20 @@ void
ChatCleanerManager::HandleGameChatText(unsigned gameId, unsigned playerId, const std::string &name, const std::string &text)
{
if (m_connected) {
- InternalChatCleanerPacket tmpChat;
- tmpChat.GetMsg()->present = ChatCleanerMessage_PR_cleanerChatRequestMessage;
- CleanerChatRequestMessage_t *netRequest = &tmpChat.GetMsg()->choice.cleanerChatRequestMessage;
- netRequest->requestId = GetNextRequestId();
+ boost::shared_ptr tmpChat(ChatCleanerMessage::default_instance().New());
+ tmpChat->set_messagetype(ChatCleanerMessage::Type_CleanerChatRequestMessage);
+ CleanerChatRequestMessage *netRequest = tmpChat->mutable_cleanerchatrequestmessage();
+ netRequest->set_requestid(GetNextRequestId());
if (gameId) {
- netRequest->cleanerChatType.present = CleanerChatType_PR_cleanerChatTypeGame;
- netRequest->cleanerChatType.choice.cleanerChatTypeGame.gameId = gameId;
+ netRequest->set_cleanerchattype(cleanerChatTypeGame);
+ netRequest->set_gameid(gameId);
} else {
- netRequest->cleanerChatType.present = CleanerChatType_PR_cleanerChatTypeLobby;
+ netRequest->set_cleanerchattype(cleanerChatTypeLobby);
}
- netRequest->playerId = playerId;
- OCTET_STRING_fromBuf(&netRequest->playerName,
- name.c_str(),
- (int)name.length());
- OCTET_STRING_fromBuf(&netRequest->chatMessage,
- text.c_str(),
- (int)text.length());
- SendMessageToServer(tmpChat);
+ netRequest->set_playerid(playerId);
+ netRequest->set_playername(name);
+ netRequest->set_chatmessage(text);
+ SendMessageToServer(*tmpChat);
}
}
@@ -141,14 +137,12 @@ ChatCleanerManager::HandleConnect(const boost::system::error_code& ec,
boost::asio::ip::tcp::resolver::iterator endpoint_iterator)
{
if (!ec) {
- InternalChatCleanerPacket tmpInit;
- tmpInit.GetMsg()->present = ChatCleanerMessage_PR_cleanerInitMessage;
- CleanerInitMessage_t *netInit = &tmpInit.GetMsg()->choice.cleanerInitMessage;
- netInit->requestedVersion = CLEANER_PROTOCOL_VERSION;
- OCTET_STRING_fromBuf(&netInit->clientSecret,
- m_clientSecret.c_str(),
- (int)m_clientSecret.length());
- SendMessageToServer(tmpInit);
+ boost::shared_ptr tmpInit(ChatCleanerMessage::default_instance().New());
+ tmpInit->set_messagetype(ChatCleanerMessage::Type_CleanerInitMessage);
+ CleanerInitMessage *netInit = tmpInit->mutable_cleanerinitmessage();
+ netInit->set_requestedversion(CLEANER_PROTOCOL_VERSION);
+ netInit->set_clientsecret(m_clientSecret);
+ SendMessageToServer(*tmpInit);
m_socket->async_read_some(
boost::asio::buffer(m_recvBuf, sizeof(m_recvBuf)),
boost::bind(
@@ -180,24 +174,38 @@ ChatCleanerManager::HandleRead(const boost::system::error_code &ec, size_t bytes
bool error = false;
m_recvBufUsed += bytesRead;
- asn_dec_rval_t retVal;
+ bool valid;
do {
- InternalChatCleanerPacket recvMsg;
- retVal = ber_decode(0, &asn_DEF_ChatCleanerMessage, (void **)recvMsg.GetMsgPtr(), m_recvBuf, m_recvBufUsed);
- if(retVal.code == RC_OK) {
- // Consume the bytes.
- if (retVal.consumed < m_recvBufUsed) {
- m_recvBufUsed -= retVal.consumed;
- memmove(m_recvBuf, m_recvBuf + retVal.consumed, m_recvBufUsed);
- } else
+ valid = false;
+ if (m_recvBufUsed >= CLEANER_NET_HEADER_SIZE) {
+ // Read the size of the packet (first 4 bytes in network byte order).
+ uint32_t nativeVal;
+ memcpy(&nativeVal, &m_recvBuf[0], sizeof(uint32_t));
+ size_t packetSize = ntohl(nativeVal);
+ if (packetSize > MAX_CLEANER_PACKET_SIZE) {
m_recvBufUsed = 0;
-
- if (asn_check_constraints(&asn_DEF_ChatCleanerMessage, recvMsg.GetMsg(), NULL, NULL) == 0)
- error = HandleMessage(recvMsg);
- else
- LOG_ERROR("Received invalid chat cleaner packet.");
+ LOG_ERROR("Invalid packet size: " << packetSize);
+ } else if (m_recvBufUsed >= packetSize + CLEANER_NET_HEADER_SIZE) {
+ try {
+ // Try to decode the packet.
+ boost::shared_ptr recvMsg(ChatCleanerMessage::default_instance().New());
+ if (recvMsg->ParseFromArray(&m_recvBuf[CLEANER_NET_HEADER_SIZE], static_cast(packetSize))) {
+ m_recvBufUsed -= (packetSize + CLEANER_NET_HEADER_SIZE);
+ if (m_recvBufUsed) {
+ memmove(m_recvBuf, m_recvBuf + packetSize + CLEANER_NET_HEADER_SIZE, m_recvBufUsed);
+ }
+ }
+ // Handle the packet.
+ error = HandleMessage(*recvMsg);
+ valid = true;
+ } catch (const exception &e) {
+ // Reset buffer on error.
+ m_recvBufUsed = 0;
+ LOG_ERROR("Exception while decoding packet: " << e.what());
+ }
+ }
}
- } while (!error && retVal.code == RC_OK);
+ } while (valid && !error);
if (!error) {
m_socket->async_read_some(
@@ -224,14 +232,13 @@ ChatCleanerManager::HandleRead(const boost::system::error_code &ec, size_t bytes
}
bool
-ChatCleanerManager::HandleMessage(InternalChatCleanerPacket &msg)
+ChatCleanerManager::HandleMessage(ChatCleanerMessage &msg)
{
bool error = true;
- if (msg.GetMsg()->present == ChatCleanerMessage_PR_cleanerInitAckMessage) {
- CleanerInitAckMessage_t *netAck = &msg.GetMsg()->choice.cleanerInitAckMessage;
- if (netAck->serverVersion == CLEANER_PROTOCOL_VERSION) {
- string tmpSecret((const char *)netAck->serverSecret.buf, netAck->serverSecret.size);
- if (m_serverSecret == tmpSecret) {
+ if (msg.messagetype() == ChatCleanerMessage::Type_CleanerInitAckMessage) {
+ const CleanerInitAckMessage &netAck = msg.cleanerinitackmessage();
+ if (netAck.serverversion() == CLEANER_PROTOCOL_VERSION) {
+ if (m_serverSecret == netAck.serversecret()) {
m_connected = true;
error = false;
LOG_MSG("Successfully connected to chat cleaner.");
@@ -239,36 +246,37 @@ ChatCleanerManager::HandleMessage(InternalChatCleanerPacket &msg)
}
if (!m_connected)
LOG_ERROR("Chat cleaner handshake failed.");
- } else if (msg.GetMsg()->present == ChatCleanerMessage_PR_cleanerChatReplyMessage) {
- CleanerChatReplyMessage_t *netReply = &msg.GetMsg()->choice.cleanerChatReplyMessage;
- if (netReply->cleanerText) {
- if (netReply->cleanerChatType.present == CleanerChatType_PR_cleanerChatTypeLobby) {
- m_callback.SignalChatBotMessage(string((const char *)netReply->cleanerText->buf, netReply->cleanerText->size));
- } else if (netReply->cleanerChatType.present == CleanerChatType_PR_cleanerChatTypeGame) {
- m_callback.SignalChatBotMessage(netReply->cleanerChatType.choice.cleanerChatTypeGame.gameId, string((const char *)netReply->cleanerText->buf, netReply->cleanerText->size));
+ } else if (msg.messagetype() == ChatCleanerMessage::Type_CleanerChatReplyMessage) {
+ const CleanerChatReplyMessage &netReply = msg.cleanerchatreplymessage();
+ if (!netReply.cleanertext().empty()) {
+ if (netReply.cleanerchattype() == cleanerChatTypeLobby) {
+ m_callback.SignalChatBotMessage(netReply.cleanertext());
+ } else if (netReply.cleanerchattype() == cleanerChatTypeGame) {
+ m_callback.SignalChatBotMessage(netReply.gameid(), netReply.cleanertext());
}
}
- if (netReply->cleanerActionType == cleanerActionType_cleanerActionKick)
- m_callback.SignalKickPlayer(netReply->playerId);
- else if (netReply->cleanerActionType == cleanerActionType_cleanerActionBan)
- m_callback.SignalBanPlayer(netReply->playerId);
- else if (netReply->cleanerActionType == cleanerActionType_cleanerActionMute)
- m_callback.SignalMutePlayer(netReply->playerId);
+ if (netReply.cleaneractiontype() == CleanerChatReplyMessage_CleanerActionType_cleanerActionKick)
+ m_callback.SignalKickPlayer(netReply.playerid());
+ else if (netReply.cleaneractiontype() == CleanerChatReplyMessage_CleanerActionType_cleanerActionBan)
+ m_callback.SignalBanPlayer(netReply.playerid());
+ else if (netReply.cleaneractiontype() == CleanerChatReplyMessage_CleanerActionType_cleanerActionMute)
+ m_callback.SignalMutePlayer(netReply.playerid());
error = false;
}
return error;
}
void
-ChatCleanerManager::SendMessageToServer(InternalChatCleanerPacket &msg)
+ChatCleanerManager::SendMessageToServer(ChatCleanerMessage &msg)
{
- asn_enc_rval_t e = der_encode(&asn_DEF_ChatCleanerMessage, msg.GetMsg(), &SendBuffer::EncodeToBuf, m_sendManager.get());
+ uint32_t packetSize = msg.ByteSize();
+ google::protobuf::uint8 *buf = new google::protobuf::uint8[packetSize + CLEANER_NET_HEADER_SIZE];
+ *((uint32_t *)buf) = htonl(packetSize);
+ msg.SerializeWithCachedSizesToArray(&buf[CLEANER_NET_HEADER_SIZE]);
+ SendBuffer::EncodeToBuf(buf, packetSize + CLEANER_NET_HEADER_SIZE, m_sendManager.get());
+ delete[] buf;
- if (e.encoded == -1)
- LOG_ERROR("Failed to encode chat cleaner packet: " << msg.GetMsg()->present);
- else {
- m_sendManager->AsyncSendNextPacket(m_socket);
- }
+ m_sendManager->AsyncSendNextPacket(m_socket);
}
unsigned
diff --git a/src/net/common/internalchatcleanerpacket.cpp b/src/net/common/internalchatcleanerpacket.cpp
deleted file mode 100644
index f73561ae..00000000
--- a/src/net/common/internalchatcleanerpacket.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*****************************************************************************
- * PokerTH - The open source texas holdem engine *
- * Copyright (C) 2006-2012 Felix Hammer, Florian Thauer, Lothar May *
- * *
- * This program is free software: you can redistribute it and/or modify *
- * it under the terms of the GNU Affero General Public License as *
- * published by the Free Software Foundation, either version 3 of the *
- * License, or (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU Affero General Public License for more details. *
- * *
- * You should have received a copy of the GNU Affero General Public License *
- * along with this program. If not, see . *
- * *
- * *
- * Additional permission under GNU AGPL version 3 section 7 *
- * *
- * If you modify this program, or any covered work, by linking or *
- * combining it with the OpenSSL project's OpenSSL library (or a *
- * modified version of that library), containing parts covered by the *
- * terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
- * (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
- * permission to convey the resulting work. *
- * Corresponding Source for a non-source form of such a combination *
- * shall include the source code for the parts of OpenSSL used as well *
- * as that of the covered work. *
- *****************************************************************************/
-
-#include
-#include
-#include
-
-using namespace std;
-
-InternalChatCleanerPacket::InternalChatCleanerPacket()
-{
- m_msg = (ChatCleanerMessage_t *)calloc(1, sizeof(ChatCleanerMessage_t));
-}
-
-InternalChatCleanerPacket::~InternalChatCleanerPacket()
-{
- ASN_STRUCT_FREE(asn_DEF_ChatCleanerMessage, m_msg);
-}
-
diff --git a/src/pokerth.cpp b/src/pokerth.cpp
index d5e7c5c2..ab911e5f 100755
--- a/src/pokerth.cpp
+++ b/src/pokerth.cpp
@@ -39,8 +39,10 @@
#include
#ifdef __APPLE__
+#if QT_VERSION < 0x050000
#include
#endif
+#endif
#include
diff --git a/src/third_party/asn1/BIT_STRING.c b/src/third_party/asn1/BIT_STRING.c
deleted file mode 100644
index 605f5120..00000000
--- a/src/third_party/asn1/BIT_STRING.c
+++ /dev/null
@@ -1,189 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#include
-#include
-#include
-
-/*
- * BIT STRING basic type description.
- */
-static ber_tlv_tag_t asn_DEF_BIT_STRING_tags[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
-};
-static asn_OCTET_STRING_specifics_t asn_DEF_BIT_STRING_specs = {
- sizeof(BIT_STRING_t),
- offsetof(BIT_STRING_t, _asn_ctx),
- ASN_OSUBV_BIT
-};
-asn_TYPE_descriptor_t asn_DEF_BIT_STRING = {
- "BIT STRING",
- "BIT_STRING",
- OCTET_STRING_free, /* Implemented in terms of OCTET STRING */
- BIT_STRING_print,
- BIT_STRING_constraint,
- OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */
- OCTET_STRING_encode_der, /* Implemented in terms of OCTET STRING */
- OCTET_STRING_decode_xer_binary,
- BIT_STRING_encode_xer,
- OCTET_STRING_decode_uper, /* Unaligned PER decoder */
- OCTET_STRING_encode_uper, /* Unaligned PER encoder */
- 0, /* Use generic outmost tag fetcher */
- asn_DEF_BIT_STRING_tags,
- sizeof(asn_DEF_BIT_STRING_tags)
- / sizeof(asn_DEF_BIT_STRING_tags[0]),
- asn_DEF_BIT_STRING_tags, /* Same as above */
- sizeof(asn_DEF_BIT_STRING_tags)
- / sizeof(asn_DEF_BIT_STRING_tags[0]),
- 0, /* No PER visible constraints */
- 0, 0, /* No members */
- &asn_DEF_BIT_STRING_specs
-};
-
-/*
- * BIT STRING generic constraint.
- */
-int
-BIT_STRING_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
-
- if(st && st->buf) {
- if((st->size == 0 && st->bits_unused)
- || st->bits_unused < 0 || st->bits_unused > 7) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: invalid padding byte (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
- } else {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- return 0;
-}
-
-static char *_bit_pattern[16] = {
- "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
- "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"
-};
-
-asn_enc_rval_t
-BIT_STRING_encode_xer(asn_TYPE_descriptor_t *td, void *sptr,
- int ilevel, enum xer_encoder_flags_e flags,
- asn_app_consume_bytes_f *cb, void *app_key) {
- asn_enc_rval_t er;
- char scratch[128];
- char *p = scratch;
- char *scend = scratch + (sizeof(scratch) - 10);
- const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
- int xcan = (flags & XER_F_CANONICAL);
- uint8_t *buf;
- uint8_t *end;
-
- if(!st || !st->buf)
- _ASN_ENCODE_FAILED;
-
- er.encoded = 0;
-
- buf = st->buf;
- end = buf + st->size - 1; /* Last byte is special */
-
- /*
- * Binary dump
- */
- for(; buf < end; buf++) {
- int v = *buf;
- int nline = xcan?0:(((buf - st->buf) % 8) == 0);
- if(p >= scend || nline) {
- er.encoded += p - scratch;
- _ASN_CALLBACK(scratch, p - scratch);
- p = scratch;
- if(nline) _i_ASN_TEXT_INDENT(1, ilevel);
- }
- memcpy(p + 0, _bit_pattern[v >> 4], 4);
- memcpy(p + 4, _bit_pattern[v & 0x0f], 4);
- p += 8;
- }
-
- if(!xcan && ((buf - st->buf) % 8) == 0)
- _i_ASN_TEXT_INDENT(1, ilevel);
- er.encoded += p - scratch;
- _ASN_CALLBACK(scratch, p - scratch);
- p = scratch;
-
- if(buf == end) {
- int v = *buf;
- int ubits = st->bits_unused;
- int i;
- for(i = 7; i >= ubits; i--)
- *p++ = (v & (1 << i)) ? 0x31 : 0x30;
- er.encoded += p - scratch;
- _ASN_CALLBACK(scratch, p - scratch);
- }
-
- if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel - 1);
-
- _ASN_ENCODED_OK(er);
-cb_failed:
- _ASN_ENCODE_FAILED;
-}
-
-
-/*
- * BIT STRING specific contents printer.
- */
-int
-BIT_STRING_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
- asn_app_consume_bytes_f *cb, void *app_key) {
- static const char *h2c = "0123456789ABCDEF";
- char scratch[64];
- const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
- uint8_t *buf;
- uint8_t *end;
- char *p = scratch;
-
- (void)td; /* Unused argument */
-
- if(!st || !st->buf)
- return (cb("", 8, app_key) < 0) ? -1 : 0;
-
- ilevel++;
- buf = st->buf;
- end = buf + st->size;
-
- /*
- * Hexadecimal dump.
- */
- for(; buf < end; buf++) {
- if((buf - st->buf) % 16 == 0 && (st->size > 16)
- && buf != st->buf) {
- _i_INDENT(1);
- /* Dump the string */
- if(cb(scratch, p - scratch, app_key) < 0) return -1;
- p = scratch;
- }
- *p++ = h2c[*buf >> 4];
- *p++ = h2c[*buf & 0x0F];
- *p++ = 0x20;
- }
-
- if(p > scratch) {
- p--; /* Eat the tailing space */
-
- if((st->size > 16)) {
- _i_INDENT(1);
- }
-
- /* Dump the incomplete 16-bytes row */
- if(cb(scratch, p - scratch, app_key) < 0)
- return -1;
- }
-
- return 0;
-}
-
diff --git a/src/third_party/asn1/BIT_STRING.h b/src/third_party/asn1/BIT_STRING.h
deleted file mode 100644
index d0f4e0bf..00000000
--- a/src/third_party/asn1/BIT_STRING.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*-
- * Copyright (c) 2003 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#ifndef _BIT_STRING_H_
-#define _BIT_STRING_H_
-
-#include /* Some help from OCTET STRING */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- typedef struct BIT_STRING_s {
- uint8_t *buf; /* BIT STRING body */
- int size; /* Size of the above buffer */
-
- int bits_unused;/* Unused trailing bits in the last octet (0..7) */
-
- asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */
- } BIT_STRING_t;
-
- extern asn_TYPE_descriptor_t asn_DEF_BIT_STRING;
-
- asn_struct_print_f BIT_STRING_print; /* Human-readable output */
- asn_constr_check_f BIT_STRING_constraint;
- xer_type_encoder_f BIT_STRING_encode_xer;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _BIT_STRING_H_ */
diff --git a/src/third_party/asn1/BOOLEAN.c b/src/third_party/asn1/BOOLEAN.c
deleted file mode 100644
index 70fad85a..00000000
--- a/src/third_party/asn1/BOOLEAN.c
+++ /dev/null
@@ -1,290 +0,0 @@
-/*-
- * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#include
-#include
-#include
-
-/*
- * BOOLEAN basic type description.
- */
-static ber_tlv_tag_t asn_DEF_BOOLEAN_tags[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (1 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_BOOLEAN = {
- "BOOLEAN",
- "BOOLEAN",
- BOOLEAN_free,
- BOOLEAN_print,
- asn_generic_no_constraint,
- BOOLEAN_decode_ber,
- BOOLEAN_encode_der,
- BOOLEAN_decode_xer,
- BOOLEAN_encode_xer,
- BOOLEAN_decode_uper, /* Unaligned PER decoder */
- BOOLEAN_encode_uper, /* Unaligned PER encoder */
- 0, /* Use generic outmost tag fetcher */
- asn_DEF_BOOLEAN_tags,
- sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]),
- asn_DEF_BOOLEAN_tags, /* Same as above */
- sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]),
- 0, /* No PER visible constraints */
- 0, 0, /* No members */
- 0 /* No specifics */
-};
-
-/*
- * Decode BOOLEAN type.
- */
-asn_dec_rval_t
-BOOLEAN_decode_ber(asn_codec_ctx_t *opt_codec_ctx,
- asn_TYPE_descriptor_t *td,
- void **bool_value, const void *buf_ptr, size_t size,
- int tag_mode) {
- BOOLEAN_t *st = (BOOLEAN_t *)*bool_value;
- asn_dec_rval_t rval;
- ber_tlv_len_t length;
- ber_tlv_len_t lidx;
-
- if(st == NULL) {
- st = (BOOLEAN_t *)(*bool_value = CALLOC(1, sizeof(*st)));
- if(st == NULL) {
- rval.code = RC_FAIL;
- rval.consumed = 0;
- return rval;
- }
- }
-
- ASN_DEBUG("Decoding %s as BOOLEAN (tm=%d)",
- td->name, tag_mode);
-
- /*
- * Check tags.
- */
- rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size,
- tag_mode, 0, &length, 0);
- if(rval.code != RC_OK)
- return rval;
-
- ASN_DEBUG("Boolean length is %d bytes", (int)length);
-
- buf_ptr = ((const char *)buf_ptr) + rval.consumed;
- size -= rval.consumed;
- if(length > (ber_tlv_len_t)size) {
- rval.code = RC_WMORE;
- rval.consumed = 0;
- return rval;
- }
-
- /*
- * Compute boolean value.
- */
- for(*st = 0, lidx = 0;
- (lidx < length) && *st == 0; lidx++) {
- /*
- * Very simple approach: read bytes until the end or
- * value is already TRUE.
- * BOOLEAN is not supposed to contain meaningful data anyway.
- */
- *st |= ((const uint8_t *)buf_ptr)[lidx];
- }
-
- rval.code = RC_OK;
- rval.consumed += length;
-
- ASN_DEBUG("Took %ld/%ld bytes to encode %s, value=%d",
- (long)rval.consumed, (long)length,
- td->name, *st);
-
- return rval;
-}
-
-asn_enc_rval_t
-BOOLEAN_encode_der(asn_TYPE_descriptor_t *td, void *sptr,
- int tag_mode, ber_tlv_tag_t tag,
- asn_app_consume_bytes_f *cb, void *app_key) {
- asn_enc_rval_t erval;
- BOOLEAN_t *st = (BOOLEAN_t *)sptr;
-
- erval.encoded = der_write_tags(td, 1, tag_mode, 0, tag, cb, app_key);
- if(erval.encoded == -1) {
- erval.failed_type = td;
- erval.structure_ptr = sptr;
- return erval;
- }
-
- if(cb) {
- uint8_t bool_value;
-
- bool_value = *st ? 0xff : 0; /* 0xff mandated by DER */
-
- if(cb(&bool_value, 1, app_key) < 0) {
- erval.encoded = -1;
- erval.failed_type = td;
- erval.structure_ptr = sptr;
- return erval;
- }
- }
-
- erval.encoded += 1;
-
- _ASN_ENCODED_OK(erval);
-}
-
-
-/*
- * Decode the chunk of XML text encoding INTEGER.
- */
-static enum xer_pbd_rval
-BOOLEAN__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_buf, size_t chunk_size) {
- BOOLEAN_t *st = (BOOLEAN_t *)sptr;
- const char *p = (const char *)chunk_buf;
-
- (void)td;
-
- if(chunk_size && p[0] == 0x3c /* '<' */) {
- switch(xer_check_tag(chunk_buf, chunk_size, "false")) {
- case XCT_BOTH:
- /* "" */
- *st = 0;
- break;
- case XCT_UNKNOWN_BO:
- if(xer_check_tag(chunk_buf, chunk_size, "true")
- != XCT_BOTH)
- return XPBD_BROKEN_ENCODING;
- /* "" */
- *st = 1; /* Or 0xff as in DER?.. */
- break;
- default:
- return XPBD_BROKEN_ENCODING;
- }
- return XPBD_BODY_CONSUMED;
- } else {
- if(xer_is_whitespace(chunk_buf, chunk_size))
- return XPBD_NOT_BODY_IGNORE;
- else
- return XPBD_BROKEN_ENCODING;
- }
-}
-
-
-asn_dec_rval_t
-BOOLEAN_decode_xer(asn_codec_ctx_t *opt_codec_ctx,
- asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname,
- const void *buf_ptr, size_t size) {
-
- return xer_decode_primitive(opt_codec_ctx, td,
- sptr, sizeof(BOOLEAN_t), opt_mname, buf_ptr, size,
- BOOLEAN__xer_body_decode);
-}
-
-asn_enc_rval_t
-BOOLEAN_encode_xer(asn_TYPE_descriptor_t *td, void *sptr,
- int ilevel, enum xer_encoder_flags_e flags,
- asn_app_consume_bytes_f *cb, void *app_key) {
- const BOOLEAN_t *st = (const BOOLEAN_t *)sptr;
- asn_enc_rval_t er;
-
- (void)ilevel;
- (void)flags;
-
- if(!st) _ASN_ENCODE_FAILED;
-
- if(*st) {
- _ASN_CALLBACK("", 7);
- er.encoded = 7;
- } else {
- _ASN_CALLBACK("", 8);
- er.encoded = 8;
- }
-
- _ASN_ENCODED_OK(er);
-cb_failed:
- _ASN_ENCODE_FAILED;
-}
-
-int
-BOOLEAN_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
- asn_app_consume_bytes_f *cb, void *app_key) {
- const BOOLEAN_t *st = (const BOOLEAN_t *)sptr;
- const char *buf;
- size_t buflen;
-
- (void)td; /* Unused argument */
- (void)ilevel; /* Unused argument */
-
- if(st) {
- if(*st) {
- buf = "TRUE";
- buflen = 4;
- } else {
- buf = "FALSE";
- buflen = 5;
- }
- } else {
- buf = "";
- buflen = 8;
- }
-
- return (cb(buf, buflen, app_key) < 0) ? -1 : 0;
-}
-
-void
-BOOLEAN_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) {
- if(td && ptr && !contents_only) {
- FREEMEM(ptr);
- }
-}
-
-asn_dec_rval_t
-BOOLEAN_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
- asn_dec_rval_t rv;
- BOOLEAN_t *st = (BOOLEAN_t *)*sptr;
-
- (void)opt_codec_ctx;
- (void)constraints;
-
- if(!st) {
- st = (BOOLEAN_t *)(*sptr = MALLOC(sizeof(*st)));
- if(!st) _ASN_DECODE_FAILED;
- }
-
- /*
- * Extract a single bit
- */
- switch(per_get_few_bits(pd, 1)) {
- case 1:
- *st = 1;
- break;
- case 0:
- *st = 0;
- break;
- case -1:
- default:
- _ASN_DECODE_STARVED;
- }
-
- ASN_DEBUG("%s decoded as %s", td->name, *st ? "TRUE" : "FALSE");
-
- rv.code = RC_OK;
- rv.consumed = 1;
- return rv;
-}
-
-
-asn_enc_rval_t
-BOOLEAN_encode_uper(asn_TYPE_descriptor_t *td,
- asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) {
- const BOOLEAN_t *st = (const BOOLEAN_t *)sptr;
- asn_enc_rval_t er;
-
- (void)constraints;
-
- if(!st) _ASN_ENCODE_FAILED;
-
- per_put_few_bits(po, *st ? 1 : 0, 1);
-
- _ASN_ENCODED_OK(er);
-}
diff --git a/src/third_party/asn1/BOOLEAN.h b/src/third_party/asn1/BOOLEAN.h
deleted file mode 100644
index ee14896b..00000000
--- a/src/third_party/asn1/BOOLEAN.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*-
- * Copyright (c) 2003 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#ifndef _BOOLEAN_H_
-#define _BOOLEAN_H_
-
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /*
- * The underlying integer may contain various values, but everything
- * non-zero is capped to 0xff by the DER encoder. The BER decoder may
- * yield non-zero values different from 1, beware.
- */
- typedef int BOOLEAN_t;
-
- extern asn_TYPE_descriptor_t asn_DEF_BOOLEAN;
-
- asn_struct_free_f BOOLEAN_free;
- asn_struct_print_f BOOLEAN_print;
- ber_type_decoder_f BOOLEAN_decode_ber;
- der_type_encoder_f BOOLEAN_encode_der;
- xer_type_decoder_f BOOLEAN_decode_xer;
- xer_type_encoder_f BOOLEAN_encode_xer;
- per_type_decoder_f BOOLEAN_decode_uper;
- per_type_encoder_f BOOLEAN_encode_uper;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _BOOLEAN_H_ */
diff --git a/src/third_party/asn1/COPYING_asn1c b/src/third_party/asn1/COPYING_asn1c
deleted file mode 100644
index f67b1f80..00000000
--- a/src/third_party/asn1/COPYING_asn1c
+++ /dev/null
@@ -1,29 +0,0 @@
-These files are generated using asn1c.
-http://lionet.info/asn1c/
-/*-
- * Copyright (c) 2003, 2004, 2005, 2006, 2007 Lev Walkin
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $Id: COPYING 1293 2007-06-23 18:33:31Z vlm $
- */
diff --git a/src/third_party/asn1/ChatCleanerMessage.c b/src/third_party/asn1/ChatCleanerMessage.c
deleted file mode 100644
index 300996cb..00000000
--- a/src/third_party/asn1/ChatCleanerMessage.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Generated by asn1c-0.9.23 (http://lionet.info/asn1c)
- * From ASN.1 module "CHATCLEANER-PROTOCOL"
- * found in "../../../docs/chatcleaner.asn1"
- * `asn1c -fskeletons-copy`
- */
-
-#include "ChatCleanerMessage.h"
-
-static asn_TYPE_member_t asn_MBR_ChatCleanerMessage_1[] = {
- { ATF_NOFLAGS, 0, offsetof(struct ChatCleanerMessage, choice.cleanerInitMessage),
- (ASN_TAG_CLASS_APPLICATION | (0 << 2)),
- 0,
- &asn_DEF_CleanerInitMessage,
- 0, /* Defer constraints checking to the member type */
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "cleanerInitMessage"
- },
- { ATF_NOFLAGS, 0, offsetof(struct ChatCleanerMessage, choice.cleanerInitAckMessage),
- (ASN_TAG_CLASS_APPLICATION | (1 << 2)),
- 0,
- &asn_DEF_CleanerInitAckMessage,
- 0, /* Defer constraints checking to the member type */
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "cleanerInitAckMessage"
- },
- { ATF_NOFLAGS, 0, offsetof(struct ChatCleanerMessage, choice.cleanerChatRequestMessage),
- (ASN_TAG_CLASS_APPLICATION | (2 << 2)),
- 0,
- &asn_DEF_CleanerChatRequestMessage,
- 0, /* Defer constraints checking to the member type */
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "cleanerChatRequestMessage"
- },
- { ATF_NOFLAGS, 0, offsetof(struct ChatCleanerMessage, choice.cleanerChatReplyMessage),
- (ASN_TAG_CLASS_APPLICATION | (3 << 2)),
- 0,
- &asn_DEF_CleanerChatReplyMessage,
- 0, /* Defer constraints checking to the member type */
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "cleanerChatReplyMessage"
- },
-};
-static asn_TYPE_tag2member_t asn_MAP_ChatCleanerMessage_tag2el_1[] = {
- { (ASN_TAG_CLASS_APPLICATION | (0 << 2)), 0, 0, 0 }, /* cleanerInitMessage at 26 */
- { (ASN_TAG_CLASS_APPLICATION | (1 << 2)), 1, 0, 0 }, /* cleanerInitAckMessage at 27 */
- { (ASN_TAG_CLASS_APPLICATION | (2 << 2)), 2, 0, 0 }, /* cleanerChatRequestMessage at 28 */
- { (ASN_TAG_CLASS_APPLICATION | (3 << 2)), 3, 0, 0 } /* cleanerChatReplyMessage at 30 */
-};
-static asn_CHOICE_specifics_t asn_SPC_ChatCleanerMessage_specs_1 = {
- sizeof(struct ChatCleanerMessage),
- offsetof(struct ChatCleanerMessage, _asn_ctx),
- offsetof(struct ChatCleanerMessage, present),
- sizeof(((struct ChatCleanerMessage *)0)->present),
- asn_MAP_ChatCleanerMessage_tag2el_1,
- 4, /* Count of tags in the map */
- 0,
- 4 /* Extensions start */
-};
-asn_TYPE_descriptor_t asn_DEF_ChatCleanerMessage = {
- "ChatCleanerMessage",
- "ChatCleanerMessage",
- CHOICE_free,
- CHOICE_print,
- CHOICE_constraint,
- CHOICE_decode_ber,
- CHOICE_encode_der,
- CHOICE_decode_xer,
- CHOICE_encode_xer,
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- CHOICE_outmost_tag,
- 0, /* No effective tags (pointer) */
- 0, /* No effective tags (count) */
- 0, /* No tags (pointer) */
- 0, /* No tags (count) */
- 0, /* No PER visible constraints */
- asn_MBR_ChatCleanerMessage_1,
- 4, /* Elements count */
- &asn_SPC_ChatCleanerMessage_specs_1 /* Additional specs */
-};
-
diff --git a/src/third_party/asn1/ChatCleanerMessage.h b/src/third_party/asn1/ChatCleanerMessage.h
deleted file mode 100644
index a1902461..00000000
--- a/src/third_party/asn1/ChatCleanerMessage.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Generated by asn1c-0.9.23 (http://lionet.info/asn1c)
- * From ASN.1 module "CHATCLEANER-PROTOCOL"
- * found in "../../../docs/chatcleaner.asn1"
- * `asn1c -fskeletons-copy`
- */
-
-#ifndef _ChatCleanerMessage_H_
-#define _ChatCleanerMessage_H_
-
-
-#include
-
-/* Including external dependencies */
-#include "CleanerInitMessage.h"
-#include "CleanerInitAckMessage.h"
-#include "CleanerChatRequestMessage.h"
-#include "CleanerChatReplyMessage.h"
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /* Dependencies */
- typedef enum ChatCleanerMessage_PR {
- ChatCleanerMessage_PR_NOTHING, /* No components present */
- ChatCleanerMessage_PR_cleanerInitMessage,
- ChatCleanerMessage_PR_cleanerInitAckMessage,
- ChatCleanerMessage_PR_cleanerChatRequestMessage,
- ChatCleanerMessage_PR_cleanerChatReplyMessage,
- /* Extensions may appear below */
-
- }
- ChatCleanerMessage_PR;
-
- /* ChatCleanerMessage */
- typedef struct ChatCleanerMessage {
- ChatCleanerMessage_PR present;
- union ChatCleanerMessage_u {
- CleanerInitMessage_t cleanerInitMessage;
- CleanerInitAckMessage_t cleanerInitAckMessage;
- CleanerChatRequestMessage_t cleanerChatRequestMessage;
- CleanerChatReplyMessage_t cleanerChatReplyMessage;
- /*
- * This type is extensible,
- * possible extensions are below.
- */
- } choice;
-
- /* Context for parsing across buffer boundaries */
- asn_struct_ctx_t _asn_ctx;
- } ChatCleanerMessage_t;
-
- /* Implementation */
- extern asn_TYPE_descriptor_t asn_DEF_ChatCleanerMessage;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _ChatCleanerMessage_H_ */
-#include
diff --git a/src/third_party/asn1/CleanerChatReplyMessage.c b/src/third_party/asn1/CleanerChatReplyMessage.c
deleted file mode 100644
index b32bf18c..00000000
--- a/src/third_party/asn1/CleanerChatReplyMessage.c
+++ /dev/null
@@ -1,550 +0,0 @@
-/*
- * Generated by asn1c-0.9.23 (http://lionet.info/asn1c)
- * From ASN.1 module "CHATCLEANER-PROTOCOL"
- * found in "../../../docs/chatcleaner.asn1"
- * `asn1c -fskeletons-copy`
- */
-
-#include "CleanerChatReplyMessage.h"
-
-static int
-requestId_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- unsigned long value;
-
- if(!sptr) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- value = *(const unsigned long *)sptr;
-
- if((value >= 1 && value <= 4294967295)) {
- /* Constraint check succeeded */
- return 0;
- } else {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: constraint failed (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-}
-
-/*
- * This type is implemented using NativeInteger,
- * so here we adjust the DEF accordingly.
- */
-static void
-requestId_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
- td->free_struct = asn_DEF_NativeInteger.free_struct;
- td->print_struct = asn_DEF_NativeInteger.print_struct;
- td->ber_decoder = asn_DEF_NativeInteger.ber_decoder;
- td->der_encoder = asn_DEF_NativeInteger.der_encoder;
- td->xer_decoder = asn_DEF_NativeInteger.xer_decoder;
- td->xer_encoder = asn_DEF_NativeInteger.xer_encoder;
- td->uper_decoder = asn_DEF_NativeInteger.uper_decoder;
- td->uper_encoder = asn_DEF_NativeInteger.uper_encoder;
- if(!td->per_constraints)
- td->per_constraints = asn_DEF_NativeInteger.per_constraints;
- td->elements = asn_DEF_NativeInteger.elements;
- td->elements_count = asn_DEF_NativeInteger.elements_count;
- /* td->specifics = asn_DEF_NativeInteger.specifics; // Defined explicitly */
-}
-
-static void
-requestId_2_free(asn_TYPE_descriptor_t *td,
- void *struct_ptr, int contents_only) {
- requestId_2_inherit_TYPE_descriptor(td);
- td->free_struct(td, struct_ptr, contents_only);
-}
-
-static int
-requestId_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
- int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
- requestId_2_inherit_TYPE_descriptor(td);
- return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
-}
-
-static asn_dec_rval_t
-requestId_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- void **structure, const void *bufptr, size_t size, int tag_mode) {
- requestId_2_inherit_TYPE_descriptor(td);
- return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
-}
-
-static asn_enc_rval_t
-requestId_2_encode_der(asn_TYPE_descriptor_t *td,
- void *structure, int tag_mode, ber_tlv_tag_t tag,
- asn_app_consume_bytes_f *cb, void *app_key) {
- requestId_2_inherit_TYPE_descriptor(td);
- return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
-}
-
-static asn_dec_rval_t
-requestId_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- void **structure, const char *opt_mname, const void *bufptr, size_t size) {
- requestId_2_inherit_TYPE_descriptor(td);
- return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
-}
-
-static asn_enc_rval_t
-requestId_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
- int ilevel, enum xer_encoder_flags_e flags,
- asn_app_consume_bytes_f *cb, void *app_key) {
- requestId_2_inherit_TYPE_descriptor(td);
- return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
-}
-
-static int
-playerId_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- unsigned long value;
-
- if(!sptr) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- value = *(const unsigned long *)sptr;
-
- if((value >= 1 && value <= 4294967295)) {
- /* Constraint check succeeded */
- return 0;
- } else {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: constraint failed (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-}
-
-/*
- * This type is implemented using NativeInteger,
- * so here we adjust the DEF accordingly.
- */
-static void
-playerId_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
- td->free_struct = asn_DEF_NativeInteger.free_struct;
- td->print_struct = asn_DEF_NativeInteger.print_struct;
- td->ber_decoder = asn_DEF_NativeInteger.ber_decoder;
- td->der_encoder = asn_DEF_NativeInteger.der_encoder;
- td->xer_decoder = asn_DEF_NativeInteger.xer_decoder;
- td->xer_encoder = asn_DEF_NativeInteger.xer_encoder;
- td->uper_decoder = asn_DEF_NativeInteger.uper_decoder;
- td->uper_encoder = asn_DEF_NativeInteger.uper_encoder;
- if(!td->per_constraints)
- td->per_constraints = asn_DEF_NativeInteger.per_constraints;
- td->elements = asn_DEF_NativeInteger.elements;
- td->elements_count = asn_DEF_NativeInteger.elements_count;
- /* td->specifics = asn_DEF_NativeInteger.specifics; // Defined explicitly */
-}
-
-static void
-playerId_4_free(asn_TYPE_descriptor_t *td,
- void *struct_ptr, int contents_only) {
- playerId_4_inherit_TYPE_descriptor(td);
- td->free_struct(td, struct_ptr, contents_only);
-}
-
-static int
-playerId_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
- int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
- playerId_4_inherit_TYPE_descriptor(td);
- return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
-}
-
-static asn_dec_rval_t
-playerId_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- void **structure, const void *bufptr, size_t size, int tag_mode) {
- playerId_4_inherit_TYPE_descriptor(td);
- return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
-}
-
-static asn_enc_rval_t
-playerId_4_encode_der(asn_TYPE_descriptor_t *td,
- void *structure, int tag_mode, ber_tlv_tag_t tag,
- asn_app_consume_bytes_f *cb, void *app_key) {
- playerId_4_inherit_TYPE_descriptor(td);
- return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
-}
-
-static asn_dec_rval_t
-playerId_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- void **structure, const char *opt_mname, const void *bufptr, size_t size) {
- playerId_4_inherit_TYPE_descriptor(td);
- return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
-}
-
-static asn_enc_rval_t
-playerId_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
- int ilevel, enum xer_encoder_flags_e flags,
- asn_app_consume_bytes_f *cb, void *app_key) {
- playerId_4_inherit_TYPE_descriptor(td);
- return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
-}
-
-static int
-cleanerActionType_5_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- /* Replace with underlying type checker */
- td->check_constraints = asn_DEF_NativeEnumerated.check_constraints;
- return td->check_constraints(td, sptr, ctfailcb, app_key);
-}
-
-/*
- * This type is implemented using NativeEnumerated,
- * so here we adjust the DEF accordingly.
- */
-static void
-cleanerActionType_5_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
- td->free_struct = asn_DEF_NativeEnumerated.free_struct;
- td->print_struct = asn_DEF_NativeEnumerated.print_struct;
- td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder;
- td->der_encoder = asn_DEF_NativeEnumerated.der_encoder;
- td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder;
- td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder;
- td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder;
- td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder;
- if(!td->per_constraints)
- td->per_constraints = asn_DEF_NativeEnumerated.per_constraints;
- td->elements = asn_DEF_NativeEnumerated.elements;
- td->elements_count = asn_DEF_NativeEnumerated.elements_count;
- /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */
-}
-
-static void
-cleanerActionType_5_free(asn_TYPE_descriptor_t *td,
- void *struct_ptr, int contents_only) {
- cleanerActionType_5_inherit_TYPE_descriptor(td);
- td->free_struct(td, struct_ptr, contents_only);
-}
-
-static int
-cleanerActionType_5_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
- int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
- cleanerActionType_5_inherit_TYPE_descriptor(td);
- return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
-}
-
-static asn_dec_rval_t
-cleanerActionType_5_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- void **structure, const void *bufptr, size_t size, int tag_mode) {
- cleanerActionType_5_inherit_TYPE_descriptor(td);
- return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
-}
-
-static asn_enc_rval_t
-cleanerActionType_5_encode_der(asn_TYPE_descriptor_t *td,
- void *structure, int tag_mode, ber_tlv_tag_t tag,
- asn_app_consume_bytes_f *cb, void *app_key) {
- cleanerActionType_5_inherit_TYPE_descriptor(td);
- return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
-}
-
-static asn_dec_rval_t
-cleanerActionType_5_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- void **structure, const char *opt_mname, const void *bufptr, size_t size) {
- cleanerActionType_5_inherit_TYPE_descriptor(td);
- return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
-}
-
-static asn_enc_rval_t
-cleanerActionType_5_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
- int ilevel, enum xer_encoder_flags_e flags,
- asn_app_consume_bytes_f *cb, void *app_key) {
- cleanerActionType_5_inherit_TYPE_descriptor(td);
- return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
-}
-
-static int
-memb_requestId_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- unsigned long value;
-
- if(!sptr) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- value = *(const unsigned long *)sptr;
-
- if((value >= 1 && value <= 4294967295)) {
- /* Constraint check succeeded */
- return 0;
- } else {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: constraint failed (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-}
-
-static int
-memb_playerId_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- unsigned long value;
-
- if(!sptr) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- value = *(const unsigned long *)sptr;
-
- if((value >= 1 && value <= 4294967295)) {
- /* Constraint check succeeded */
- return 0;
- } else {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: constraint failed (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-}
-
-static int
-memb_cleanerText_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- const UTF8String_t *st = (const UTF8String_t *)sptr;
- size_t size;
-
- if(!sptr) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- size = UTF8String_length(st);
- if((ssize_t)size < 0) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: UTF-8: broken encoding (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- if((size >= 1 && size <= 128)) {
- /* Constraint check succeeded */
- return 0;
- } else {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: constraint failed (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-}
-
-static asn_INTEGER_specifics_t asn_SPC_requestId_specs_2 = {
- 0, 0, 0, 0, 0,
- 0, /* Native long size */
- 1 /* Unsigned representation */
-};
-static ber_tlv_tag_t asn_DEF_requestId_tags_2[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_requestId_2 = {
- "requestId",
- "requestId",
- requestId_2_free,
- requestId_2_print,
- requestId_2_constraint,
- requestId_2_decode_ber,
- requestId_2_encode_der,
- requestId_2_decode_xer,
- requestId_2_encode_xer,
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
- asn_DEF_requestId_tags_2,
- sizeof(asn_DEF_requestId_tags_2)
- /sizeof(asn_DEF_requestId_tags_2[0]), /* 1 */
- asn_DEF_requestId_tags_2, /* Same as above */
- sizeof(asn_DEF_requestId_tags_2)
- /sizeof(asn_DEF_requestId_tags_2[0]), /* 1 */
- 0, /* No PER visible constraints */
- 0, 0, /* No members */
- &asn_SPC_requestId_specs_2 /* Additional specs */
-};
-
-static asn_INTEGER_specifics_t asn_SPC_playerId_specs_4 = {
- 0, 0, 0, 0, 0,
- 0, /* Native long size */
- 1 /* Unsigned representation */
-};
-static ber_tlv_tag_t asn_DEF_playerId_tags_4[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_playerId_4 = {
- "playerId",
- "playerId",
- playerId_4_free,
- playerId_4_print,
- playerId_4_constraint,
- playerId_4_decode_ber,
- playerId_4_encode_der,
- playerId_4_decode_xer,
- playerId_4_encode_xer,
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
- asn_DEF_playerId_tags_4,
- sizeof(asn_DEF_playerId_tags_4)
- /sizeof(asn_DEF_playerId_tags_4[0]), /* 1 */
- asn_DEF_playerId_tags_4, /* Same as above */
- sizeof(asn_DEF_playerId_tags_4)
- /sizeof(asn_DEF_playerId_tags_4[0]), /* 1 */
- 0, /* No PER visible constraints */
- 0, 0, /* No members */
- &asn_SPC_playerId_specs_4 /* Additional specs */
-};
-
-static asn_INTEGER_enum_map_t asn_MAP_cleanerActionType_value2enum_5[] = {
- { 0, 17, "cleanerActionNone" },
- { 1, 20, "cleanerActionWarning" },
- { 2, 17, "cleanerActionKick" },
- { 3, 16, "cleanerActionBan" },
- { 4, 17, "cleanerActionMute" }
-};
-static unsigned int asn_MAP_cleanerActionType_enum2value_5[] = {
- 3, /* cleanerActionBan(3) */
- 2, /* cleanerActionKick(2) */
- 4, /* cleanerActionMute(4) */
- 0, /* cleanerActionNone(0) */
- 1 /* cleanerActionWarning(1) */
-};
-static asn_INTEGER_specifics_t asn_SPC_cleanerActionType_specs_5 = {
- asn_MAP_cleanerActionType_value2enum_5, /* "tag" => N; sorted by tag */
- asn_MAP_cleanerActionType_enum2value_5, /* N => "tag"; sorted by N */
- 5, /* Number of elements in the maps */
- 0, /* Enumeration is not extensible */
- 1, /* Strict enumeration */
- 0, /* Native long size */
- 0
-};
-static ber_tlv_tag_t asn_DEF_cleanerActionType_tags_5[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_cleanerActionType_5 = {
- "cleanerActionType",
- "cleanerActionType",
- cleanerActionType_5_free,
- cleanerActionType_5_print,
- cleanerActionType_5_constraint,
- cleanerActionType_5_decode_ber,
- cleanerActionType_5_encode_der,
- cleanerActionType_5_decode_xer,
- cleanerActionType_5_encode_xer,
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
- asn_DEF_cleanerActionType_tags_5,
- sizeof(asn_DEF_cleanerActionType_tags_5)
- /sizeof(asn_DEF_cleanerActionType_tags_5[0]), /* 1 */
- asn_DEF_cleanerActionType_tags_5, /* Same as above */
- sizeof(asn_DEF_cleanerActionType_tags_5)
- /sizeof(asn_DEF_cleanerActionType_tags_5[0]), /* 1 */
- 0, /* No PER visible constraints */
- 0, 0, /* Defined elsewhere */
- &asn_SPC_cleanerActionType_specs_5 /* Additional specs */
-};
-
-static asn_TYPE_member_t asn_MBR_CleanerChatReplyMessage_1[] = {
- { ATF_NOFLAGS, 0, offsetof(struct CleanerChatReplyMessage, requestId),
- (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
- 0,
- &asn_DEF_requestId_2,
- memb_requestId_constraint_1,
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "requestId"
- },
- { ATF_NOFLAGS, 0, offsetof(struct CleanerChatReplyMessage, cleanerChatType),
- -1 /* Ambiguous tag (CHOICE?) */,
- 0,
- &asn_DEF_CleanerChatType,
- 0, /* Defer constraints checking to the member type */
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "cleanerChatType"
- },
- { ATF_NOFLAGS, 0, offsetof(struct CleanerChatReplyMessage, playerId),
- (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
- 0,
- &asn_DEF_playerId_4,
- memb_playerId_constraint_1,
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "playerId"
- },
- { ATF_NOFLAGS, 0, offsetof(struct CleanerChatReplyMessage, cleanerActionType),
- (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
- 0,
- &asn_DEF_cleanerActionType_5,
- 0, /* Defer constraints checking to the member type */
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "cleanerActionType"
- },
- { ATF_POINTER, 1, offsetof(struct CleanerChatReplyMessage, cleanerText),
- (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)),
- 0,
- &asn_DEF_UTF8String,
- memb_cleanerText_constraint_1,
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "cleanerText"
- },
-};
-static ber_tlv_tag_t asn_DEF_CleanerChatReplyMessage_tags_1[] = {
- (ASN_TAG_CLASS_APPLICATION | (3 << 2)),
- (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_TYPE_tag2member_t asn_MAP_CleanerChatReplyMessage_tag2el_1[] = {
- { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* requestId at 63 */
- { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 0 }, /* playerId at 65 */
- { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 3, 0, 0 }, /* cleanerActionType at 67 */
- { (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)), 4, 0, 0 }, /* cleanerText at 73 */
- { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* cleanerChatTypeLobby at 43 */
- { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cleanerChatTypeGame at 45 */
-};
-static asn_SEQUENCE_specifics_t asn_SPC_CleanerChatReplyMessage_specs_1 = {
- sizeof(struct CleanerChatReplyMessage),
- offsetof(struct CleanerChatReplyMessage, _asn_ctx),
- asn_MAP_CleanerChatReplyMessage_tag2el_1,
- 6, /* Count of tags in the map */
- 0, 0, 0, /* Optional elements (not needed) */
- 4, /* Start extensions */
- 6 /* Stop extensions */
-};
-asn_TYPE_descriptor_t asn_DEF_CleanerChatReplyMessage = {
- "CleanerChatReplyMessage",
- "CleanerChatReplyMessage",
- SEQUENCE_free,
- SEQUENCE_print,
- SEQUENCE_constraint,
- SEQUENCE_decode_ber,
- SEQUENCE_encode_der,
- SEQUENCE_decode_xer,
- SEQUENCE_encode_xer,
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
- asn_DEF_CleanerChatReplyMessage_tags_1,
- sizeof(asn_DEF_CleanerChatReplyMessage_tags_1)
- /sizeof(asn_DEF_CleanerChatReplyMessage_tags_1[0]) - 1, /* 1 */
- asn_DEF_CleanerChatReplyMessage_tags_1, /* Same as above */
- sizeof(asn_DEF_CleanerChatReplyMessage_tags_1)
- /sizeof(asn_DEF_CleanerChatReplyMessage_tags_1[0]), /* 2 */
- 0, /* No PER visible constraints */
- asn_MBR_CleanerChatReplyMessage_1,
- 5, /* Elements count */
- &asn_SPC_CleanerChatReplyMessage_specs_1 /* Additional specs */
-};
-
diff --git a/src/third_party/asn1/CleanerChatReplyMessage.h b/src/third_party/asn1/CleanerChatReplyMessage.h
deleted file mode 100644
index df23b24d..00000000
--- a/src/third_party/asn1/CleanerChatReplyMessage.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Generated by asn1c-0.9.23 (http://lionet.info/asn1c)
- * From ASN.1 module "CHATCLEANER-PROTOCOL"
- * found in "../../../docs/chatcleaner.asn1"
- * `asn1c -fskeletons-copy`
- */
-
-#ifndef _CleanerChatReplyMessage_H_
-#define _CleanerChatReplyMessage_H_
-
-
-#include
-
-/* Including external dependencies */
-#include
-#include "CleanerChatType.h"
-#include
-#include
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /* Dependencies */
- typedef enum cleanerActionType {
- cleanerActionType_cleanerActionNone = 0,
- cleanerActionType_cleanerActionWarning = 1,
- cleanerActionType_cleanerActionKick = 2,
- cleanerActionType_cleanerActionBan = 3,
- cleanerActionType_cleanerActionMute = 4
- }
- e_cleanerActionType;
-
- /* CleanerChatReplyMessage */
- typedef struct CleanerChatReplyMessage {
- unsigned long requestId;
- CleanerChatType_t cleanerChatType;
- unsigned long playerId;
- long cleanerActionType;
- UTF8String_t *cleanerText /* OPTIONAL */;
- /*
- * This type is extensible,
- * possible extensions are below.
- */
-
- /* Context for parsing across buffer boundaries */
- asn_struct_ctx_t _asn_ctx;
- } CleanerChatReplyMessage_t;
-
- /* Implementation */
- /* extern asn_TYPE_descriptor_t asn_DEF_requestId_2; // (Use -fall-defs-global to expose) */
- /* extern asn_TYPE_descriptor_t asn_DEF_playerId_4; // (Use -fall-defs-global to expose) */
- /* extern asn_TYPE_descriptor_t asn_DEF_cleanerActionType_5; // (Use -fall-defs-global to expose) */
- extern asn_TYPE_descriptor_t asn_DEF_CleanerChatReplyMessage;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CleanerChatReplyMessage_H_ */
-#include
diff --git a/src/third_party/asn1/CleanerChatRequestMessage.c b/src/third_party/asn1/CleanerChatRequestMessage.c
deleted file mode 100644
index 390e5c6d..00000000
--- a/src/third_party/asn1/CleanerChatRequestMessage.c
+++ /dev/null
@@ -1,459 +0,0 @@
-/*
- * Generated by asn1c-0.9.23 (http://lionet.info/asn1c)
- * From ASN.1 module "CHATCLEANER-PROTOCOL"
- * found in "../../../docs/chatcleaner.asn1"
- * `asn1c -fskeletons-copy`
- */
-
-#include "CleanerChatRequestMessage.h"
-
-static int
-requestId_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- unsigned long value;
-
- if(!sptr) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- value = *(const unsigned long *)sptr;
-
- if((value >= 1 && value <= 4294967295)) {
- /* Constraint check succeeded */
- return 0;
- } else {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: constraint failed (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-}
-
-/*
- * This type is implemented using NativeInteger,
- * so here we adjust the DEF accordingly.
- */
-static void
-requestId_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
- td->free_struct = asn_DEF_NativeInteger.free_struct;
- td->print_struct = asn_DEF_NativeInteger.print_struct;
- td->ber_decoder = asn_DEF_NativeInteger.ber_decoder;
- td->der_encoder = asn_DEF_NativeInteger.der_encoder;
- td->xer_decoder = asn_DEF_NativeInteger.xer_decoder;
- td->xer_encoder = asn_DEF_NativeInteger.xer_encoder;
- td->uper_decoder = asn_DEF_NativeInteger.uper_decoder;
- td->uper_encoder = asn_DEF_NativeInteger.uper_encoder;
- if(!td->per_constraints)
- td->per_constraints = asn_DEF_NativeInteger.per_constraints;
- td->elements = asn_DEF_NativeInteger.elements;
- td->elements_count = asn_DEF_NativeInteger.elements_count;
- /* td->specifics = asn_DEF_NativeInteger.specifics; // Defined explicitly */
-}
-
-static void
-requestId_2_free(asn_TYPE_descriptor_t *td,
- void *struct_ptr, int contents_only) {
- requestId_2_inherit_TYPE_descriptor(td);
- td->free_struct(td, struct_ptr, contents_only);
-}
-
-static int
-requestId_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
- int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
- requestId_2_inherit_TYPE_descriptor(td);
- return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
-}
-
-static asn_dec_rval_t
-requestId_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- void **structure, const void *bufptr, size_t size, int tag_mode) {
- requestId_2_inherit_TYPE_descriptor(td);
- return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
-}
-
-static asn_enc_rval_t
-requestId_2_encode_der(asn_TYPE_descriptor_t *td,
- void *structure, int tag_mode, ber_tlv_tag_t tag,
- asn_app_consume_bytes_f *cb, void *app_key) {
- requestId_2_inherit_TYPE_descriptor(td);
- return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
-}
-
-static asn_dec_rval_t
-requestId_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- void **structure, const char *opt_mname, const void *bufptr, size_t size) {
- requestId_2_inherit_TYPE_descriptor(td);
- return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
-}
-
-static asn_enc_rval_t
-requestId_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
- int ilevel, enum xer_encoder_flags_e flags,
- asn_app_consume_bytes_f *cb, void *app_key) {
- requestId_2_inherit_TYPE_descriptor(td);
- return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
-}
-
-static int
-playerId_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- unsigned long value;
-
- if(!sptr) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- value = *(const unsigned long *)sptr;
-
- if((value >= 1 && value <= 4294967295)) {
- /* Constraint check succeeded */
- return 0;
- } else {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: constraint failed (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-}
-
-/*
- * This type is implemented using NativeInteger,
- * so here we adjust the DEF accordingly.
- */
-static void
-playerId_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
- td->free_struct = asn_DEF_NativeInteger.free_struct;
- td->print_struct = asn_DEF_NativeInteger.print_struct;
- td->ber_decoder = asn_DEF_NativeInteger.ber_decoder;
- td->der_encoder = asn_DEF_NativeInteger.der_encoder;
- td->xer_decoder = asn_DEF_NativeInteger.xer_decoder;
- td->xer_encoder = asn_DEF_NativeInteger.xer_encoder;
- td->uper_decoder = asn_DEF_NativeInteger.uper_decoder;
- td->uper_encoder = asn_DEF_NativeInteger.uper_encoder;
- if(!td->per_constraints)
- td->per_constraints = asn_DEF_NativeInteger.per_constraints;
- td->elements = asn_DEF_NativeInteger.elements;
- td->elements_count = asn_DEF_NativeInteger.elements_count;
- /* td->specifics = asn_DEF_NativeInteger.specifics; // Defined explicitly */
-}
-
-static void
-playerId_4_free(asn_TYPE_descriptor_t *td,
- void *struct_ptr, int contents_only) {
- playerId_4_inherit_TYPE_descriptor(td);
- td->free_struct(td, struct_ptr, contents_only);
-}
-
-static int
-playerId_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
- int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
- playerId_4_inherit_TYPE_descriptor(td);
- return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
-}
-
-static asn_dec_rval_t
-playerId_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- void **structure, const void *bufptr, size_t size, int tag_mode) {
- playerId_4_inherit_TYPE_descriptor(td);
- return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
-}
-
-static asn_enc_rval_t
-playerId_4_encode_der(asn_TYPE_descriptor_t *td,
- void *structure, int tag_mode, ber_tlv_tag_t tag,
- asn_app_consume_bytes_f *cb, void *app_key) {
- playerId_4_inherit_TYPE_descriptor(td);
- return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
-}
-
-static asn_dec_rval_t
-playerId_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- void **structure, const char *opt_mname, const void *bufptr, size_t size) {
- playerId_4_inherit_TYPE_descriptor(td);
- return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
-}
-
-static asn_enc_rval_t
-playerId_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
- int ilevel, enum xer_encoder_flags_e flags,
- asn_app_consume_bytes_f *cb, void *app_key) {
- playerId_4_inherit_TYPE_descriptor(td);
- return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
-}
-
-static int
-memb_requestId_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- unsigned long value;
-
- if(!sptr) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- value = *(const unsigned long *)sptr;
-
- if((value >= 1 && value <= 4294967295)) {
- /* Constraint check succeeded */
- return 0;
- } else {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: constraint failed (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-}
-
-static int
-memb_playerId_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- unsigned long value;
-
- if(!sptr) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- value = *(const unsigned long *)sptr;
-
- if((value >= 1 && value <= 4294967295)) {
- /* Constraint check succeeded */
- return 0;
- } else {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: constraint failed (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-}
-
-static int
-memb_playerName_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- const UTF8String_t *st = (const UTF8String_t *)sptr;
- size_t size;
-
- if(!sptr) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- size = UTF8String_length(st);
- if((ssize_t)size < 0) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: UTF-8: broken encoding (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- if((size >= 1 && size <= 32)) {
- /* Constraint check succeeded */
- return 0;
- } else {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: constraint failed (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-}
-
-static int
-memb_chatMessage_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- const UTF8String_t *st = (const UTF8String_t *)sptr;
- size_t size;
-
- if(!sptr) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- size = UTF8String_length(st);
- if((ssize_t)size < 0) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: UTF-8: broken encoding (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- if((size >= 1 && size <= 128)) {
- /* Constraint check succeeded */
- return 0;
- } else {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: constraint failed (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-}
-
-static asn_INTEGER_specifics_t asn_SPC_requestId_specs_2 = {
- 0, 0, 0, 0, 0,
- 0, /* Native long size */
- 1 /* Unsigned representation */
-};
-static ber_tlv_tag_t asn_DEF_requestId_tags_2[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_requestId_2 = {
- "requestId",
- "requestId",
- requestId_2_free,
- requestId_2_print,
- requestId_2_constraint,
- requestId_2_decode_ber,
- requestId_2_encode_der,
- requestId_2_decode_xer,
- requestId_2_encode_xer,
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
- asn_DEF_requestId_tags_2,
- sizeof(asn_DEF_requestId_tags_2)
- /sizeof(asn_DEF_requestId_tags_2[0]), /* 1 */
- asn_DEF_requestId_tags_2, /* Same as above */
- sizeof(asn_DEF_requestId_tags_2)
- /sizeof(asn_DEF_requestId_tags_2[0]), /* 1 */
- 0, /* No PER visible constraints */
- 0, 0, /* No members */
- &asn_SPC_requestId_specs_2 /* Additional specs */
-};
-
-static asn_INTEGER_specifics_t asn_SPC_playerId_specs_4 = {
- 0, 0, 0, 0, 0,
- 0, /* Native long size */
- 1 /* Unsigned representation */
-};
-static ber_tlv_tag_t asn_DEF_playerId_tags_4[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_playerId_4 = {
- "playerId",
- "playerId",
- playerId_4_free,
- playerId_4_print,
- playerId_4_constraint,
- playerId_4_decode_ber,
- playerId_4_encode_der,
- playerId_4_decode_xer,
- playerId_4_encode_xer,
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
- asn_DEF_playerId_tags_4,
- sizeof(asn_DEF_playerId_tags_4)
- /sizeof(asn_DEF_playerId_tags_4[0]), /* 1 */
- asn_DEF_playerId_tags_4, /* Same as above */
- sizeof(asn_DEF_playerId_tags_4)
- /sizeof(asn_DEF_playerId_tags_4[0]), /* 1 */
- 0, /* No PER visible constraints */
- 0, 0, /* No members */
- &asn_SPC_playerId_specs_4 /* Additional specs */
-};
-
-static asn_TYPE_member_t asn_MBR_CleanerChatRequestMessage_1[] = {
- { ATF_NOFLAGS, 0, offsetof(struct CleanerChatRequestMessage, requestId),
- (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
- 0,
- &asn_DEF_requestId_2,
- memb_requestId_constraint_1,
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "requestId"
- },
- { ATF_NOFLAGS, 0, offsetof(struct CleanerChatRequestMessage, cleanerChatType),
- -1 /* Ambiguous tag (CHOICE?) */,
- 0,
- &asn_DEF_CleanerChatType,
- 0, /* Defer constraints checking to the member type */
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "cleanerChatType"
- },
- { ATF_NOFLAGS, 0, offsetof(struct CleanerChatRequestMessage, playerId),
- (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
- 0,
- &asn_DEF_playerId_4,
- memb_playerId_constraint_1,
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "playerId"
- },
- { ATF_NOFLAGS, 0, offsetof(struct CleanerChatRequestMessage, playerName),
- (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)),
- 0,
- &asn_DEF_UTF8String,
- memb_playerName_constraint_1,
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "playerName"
- },
- { ATF_NOFLAGS, 0, offsetof(struct CleanerChatRequestMessage, chatMessage),
- (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)),
- 0,
- &asn_DEF_UTF8String,
- memb_chatMessage_constraint_1,
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "chatMessage"
- },
-};
-static ber_tlv_tag_t asn_DEF_CleanerChatRequestMessage_tags_1[] = {
- (ASN_TAG_CLASS_APPLICATION | (2 << 2)),
- (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_TYPE_tag2member_t asn_MAP_CleanerChatRequestMessage_tag2el_1[] = {
- { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* requestId at 55 */
- { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 0 }, /* playerId at 57 */
- { (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)), 3, 0, 1 }, /* playerName at 58 */
- { (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)), 4, -1, 0 }, /* chatMessage at 59 */
- { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* cleanerChatTypeLobby at 43 */
- { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cleanerChatTypeGame at 45 */
-};
-static asn_SEQUENCE_specifics_t asn_SPC_CleanerChatRequestMessage_specs_1 = {
- sizeof(struct CleanerChatRequestMessage),
- offsetof(struct CleanerChatRequestMessage, _asn_ctx),
- asn_MAP_CleanerChatRequestMessage_tag2el_1,
- 6, /* Count of tags in the map */
- 0, 0, 0, /* Optional elements (not needed) */
- 4, /* Start extensions */
- 6 /* Stop extensions */
-};
-asn_TYPE_descriptor_t asn_DEF_CleanerChatRequestMessage = {
- "CleanerChatRequestMessage",
- "CleanerChatRequestMessage",
- SEQUENCE_free,
- SEQUENCE_print,
- SEQUENCE_constraint,
- SEQUENCE_decode_ber,
- SEQUENCE_encode_der,
- SEQUENCE_decode_xer,
- SEQUENCE_encode_xer,
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
- asn_DEF_CleanerChatRequestMessage_tags_1,
- sizeof(asn_DEF_CleanerChatRequestMessage_tags_1)
- /sizeof(asn_DEF_CleanerChatRequestMessage_tags_1[0]) - 1, /* 1 */
- asn_DEF_CleanerChatRequestMessage_tags_1, /* Same as above */
- sizeof(asn_DEF_CleanerChatRequestMessage_tags_1)
- /sizeof(asn_DEF_CleanerChatRequestMessage_tags_1[0]), /* 2 */
- 0, /* No PER visible constraints */
- asn_MBR_CleanerChatRequestMessage_1,
- 5, /* Elements count */
- &asn_SPC_CleanerChatRequestMessage_specs_1 /* Additional specs */
-};
-
diff --git a/src/third_party/asn1/CleanerChatRequestMessage.h b/src/third_party/asn1/CleanerChatRequestMessage.h
deleted file mode 100644
index f3f38318..00000000
--- a/src/third_party/asn1/CleanerChatRequestMessage.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Generated by asn1c-0.9.23 (http://lionet.info/asn1c)
- * From ASN.1 module "CHATCLEANER-PROTOCOL"
- * found in "../../../docs/chatcleaner.asn1"
- * `asn1c -fskeletons-copy`
- */
-
-#ifndef _CleanerChatRequestMessage_H_
-#define _CleanerChatRequestMessage_H_
-
-
-#include
-
-/* Including external dependencies */
-#include
-#include "CleanerChatType.h"
-#include
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /* CleanerChatRequestMessage */
- typedef struct CleanerChatRequestMessage {
- unsigned long requestId;
- CleanerChatType_t cleanerChatType;
- unsigned long playerId;
- UTF8String_t playerName;
- UTF8String_t chatMessage;
- /*
- * This type is extensible,
- * possible extensions are below.
- */
-
- /* Context for parsing across buffer boundaries */
- asn_struct_ctx_t _asn_ctx;
- } CleanerChatRequestMessage_t;
-
- /* Implementation */
- /* extern asn_TYPE_descriptor_t asn_DEF_requestId_2; // (Use -fall-defs-global to expose) */
- /* extern asn_TYPE_descriptor_t asn_DEF_playerId_4; // (Use -fall-defs-global to expose) */
- extern asn_TYPE_descriptor_t asn_DEF_CleanerChatRequestMessage;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CleanerChatRequestMessage_H_ */
-#include
diff --git a/src/third_party/asn1/CleanerChatType.c b/src/third_party/asn1/CleanerChatType.c
deleted file mode 100644
index 234871e5..00000000
--- a/src/third_party/asn1/CleanerChatType.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Generated by asn1c-0.9.23 (http://lionet.info/asn1c)
- * From ASN.1 module "CHATCLEANER-PROTOCOL"
- * found in "../../../docs/chatcleaner.asn1"
- * `asn1c -fskeletons-copy`
- */
-
-#include "CleanerChatType.h"
-
-static asn_TYPE_member_t asn_MBR_CleanerChatType_1[] = {
- { ATF_NOFLAGS, 0, offsetof(struct CleanerChatType, choice.cleanerChatTypeLobby),
- (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
- -1, /* IMPLICIT tag at current level */
- &asn_DEF_CleanerChatTypeLobby,
- 0, /* Defer constraints checking to the member type */
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "cleanerChatTypeLobby"
- },
- { ATF_NOFLAGS, 0, offsetof(struct CleanerChatType, choice.cleanerChatTypeGame),
- (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
- -1, /* IMPLICIT tag at current level */
- &asn_DEF_CleanerChatTypeGame,
- 0, /* Defer constraints checking to the member type */
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "cleanerChatTypeGame"
- },
-};
-static asn_TYPE_tag2member_t asn_MAP_CleanerChatType_tag2el_1[] = {
- { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cleanerChatTypeLobby at 43 */
- { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cleanerChatTypeGame at 45 */
-};
-static asn_CHOICE_specifics_t asn_SPC_CleanerChatType_specs_1 = {
- sizeof(struct CleanerChatType),
- offsetof(struct CleanerChatType, _asn_ctx),
- offsetof(struct CleanerChatType, present),
- sizeof(((struct CleanerChatType *)0)->present),
- asn_MAP_CleanerChatType_tag2el_1,
- 2, /* Count of tags in the map */
- 0,
- 2 /* Extensions start */
-};
-asn_TYPE_descriptor_t asn_DEF_CleanerChatType = {
- "CleanerChatType",
- "CleanerChatType",
- CHOICE_free,
- CHOICE_print,
- CHOICE_constraint,
- CHOICE_decode_ber,
- CHOICE_encode_der,
- CHOICE_decode_xer,
- CHOICE_encode_xer,
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- CHOICE_outmost_tag,
- 0, /* No effective tags (pointer) */
- 0, /* No effective tags (count) */
- 0, /* No tags (pointer) */
- 0, /* No tags (count) */
- 0, /* No PER visible constraints */
- asn_MBR_CleanerChatType_1,
- 2, /* Elements count */
- &asn_SPC_CleanerChatType_specs_1 /* Additional specs */
-};
-
diff --git a/src/third_party/asn1/CleanerChatType.h b/src/third_party/asn1/CleanerChatType.h
deleted file mode 100644
index a37b2824..00000000
--- a/src/third_party/asn1/CleanerChatType.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Generated by asn1c-0.9.23 (http://lionet.info/asn1c)
- * From ASN.1 module "CHATCLEANER-PROTOCOL"
- * found in "../../../docs/chatcleaner.asn1"
- * `asn1c -fskeletons-copy`
- */
-
-#ifndef _CleanerChatType_H_
-#define _CleanerChatType_H_
-
-
-#include
-
-/* Including external dependencies */
-#include "CleanerChatTypeLobby.h"
-#include "CleanerChatTypeGame.h"
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /* Dependencies */
- typedef enum CleanerChatType_PR {
- CleanerChatType_PR_NOTHING, /* No components present */
- CleanerChatType_PR_cleanerChatTypeLobby,
- CleanerChatType_PR_cleanerChatTypeGame,
- /* Extensions may appear below */
-
- }
- CleanerChatType_PR;
-
- /* CleanerChatType */
- typedef struct CleanerChatType {
- CleanerChatType_PR present;
- union CleanerChatType_u {
- CleanerChatTypeLobby_t cleanerChatTypeLobby;
- CleanerChatTypeGame_t cleanerChatTypeGame;
- /*
- * This type is extensible,
- * possible extensions are below.
- */
- } choice;
-
- /* Context for parsing across buffer boundaries */
- asn_struct_ctx_t _asn_ctx;
- } CleanerChatType_t;
-
- /* Implementation */
- extern asn_TYPE_descriptor_t asn_DEF_CleanerChatType;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CleanerChatType_H_ */
-#include
diff --git a/src/third_party/asn1/CleanerChatTypeGame.c b/src/third_party/asn1/CleanerChatTypeGame.c
deleted file mode 100644
index 438db1f8..00000000
--- a/src/third_party/asn1/CleanerChatTypeGame.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Generated by asn1c-0.9.23 (http://lionet.info/asn1c)
- * From ASN.1 module "CHATCLEANER-PROTOCOL"
- * found in "../../../docs/chatcleaner.asn1"
- * `asn1c -fskeletons-copy`
- */
-
-#include "CleanerChatTypeGame.h"
-
-static int
-gameId_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- unsigned long value;
-
- if(!sptr) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- value = *(const unsigned long *)sptr;
-
- if((value >= 1 && value <= 4294967295)) {
- /* Constraint check succeeded */
- return 0;
- } else {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: constraint failed (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-}
-
-/*
- * This type is implemented using NativeInteger,
- * so here we adjust the DEF accordingly.
- */
-static void
-gameId_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
- td->free_struct = asn_DEF_NativeInteger.free_struct;
- td->print_struct = asn_DEF_NativeInteger.print_struct;
- td->ber_decoder = asn_DEF_NativeInteger.ber_decoder;
- td->der_encoder = asn_DEF_NativeInteger.der_encoder;
- td->xer_decoder = asn_DEF_NativeInteger.xer_decoder;
- td->xer_encoder = asn_DEF_NativeInteger.xer_encoder;
- td->uper_decoder = asn_DEF_NativeInteger.uper_decoder;
- td->uper_encoder = asn_DEF_NativeInteger.uper_encoder;
- if(!td->per_constraints)
- td->per_constraints = asn_DEF_NativeInteger.per_constraints;
- td->elements = asn_DEF_NativeInteger.elements;
- td->elements_count = asn_DEF_NativeInteger.elements_count;
- /* td->specifics = asn_DEF_NativeInteger.specifics; // Defined explicitly */
-}
-
-static void
-gameId_2_free(asn_TYPE_descriptor_t *td,
- void *struct_ptr, int contents_only) {
- gameId_2_inherit_TYPE_descriptor(td);
- td->free_struct(td, struct_ptr, contents_only);
-}
-
-static int
-gameId_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
- int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
- gameId_2_inherit_TYPE_descriptor(td);
- return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
-}
-
-static asn_dec_rval_t
-gameId_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- void **structure, const void *bufptr, size_t size, int tag_mode) {
- gameId_2_inherit_TYPE_descriptor(td);
- return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
-}
-
-static asn_enc_rval_t
-gameId_2_encode_der(asn_TYPE_descriptor_t *td,
- void *structure, int tag_mode, ber_tlv_tag_t tag,
- asn_app_consume_bytes_f *cb, void *app_key) {
- gameId_2_inherit_TYPE_descriptor(td);
- return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
-}
-
-static asn_dec_rval_t
-gameId_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- void **structure, const char *opt_mname, const void *bufptr, size_t size) {
- gameId_2_inherit_TYPE_descriptor(td);
- return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
-}
-
-static asn_enc_rval_t
-gameId_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
- int ilevel, enum xer_encoder_flags_e flags,
- asn_app_consume_bytes_f *cb, void *app_key) {
- gameId_2_inherit_TYPE_descriptor(td);
- return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
-}
-
-static int
-memb_gameId_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- unsigned long value;
-
- if(!sptr) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- value = *(const unsigned long *)sptr;
-
- if((value >= 1 && value <= 4294967295)) {
- /* Constraint check succeeded */
- return 0;
- } else {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: constraint failed (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-}
-
-static asn_INTEGER_specifics_t asn_SPC_gameId_specs_2 = {
- 0, 0, 0, 0, 0,
- 0, /* Native long size */
- 1 /* Unsigned representation */
-};
-static ber_tlv_tag_t asn_DEF_gameId_tags_2[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_gameId_2 = {
- "gameId",
- "gameId",
- gameId_2_free,
- gameId_2_print,
- gameId_2_constraint,
- gameId_2_decode_ber,
- gameId_2_encode_der,
- gameId_2_decode_xer,
- gameId_2_encode_xer,
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
- asn_DEF_gameId_tags_2,
- sizeof(asn_DEF_gameId_tags_2)
- /sizeof(asn_DEF_gameId_tags_2[0]), /* 1 */
- asn_DEF_gameId_tags_2, /* Same as above */
- sizeof(asn_DEF_gameId_tags_2)
- /sizeof(asn_DEF_gameId_tags_2[0]), /* 1 */
- 0, /* No PER visible constraints */
- 0, 0, /* No members */
- &asn_SPC_gameId_specs_2 /* Additional specs */
-};
-
-static asn_TYPE_member_t asn_MBR_CleanerChatTypeGame_1[] = {
- { ATF_NOFLAGS, 0, offsetof(struct CleanerChatTypeGame, gameId),
- (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
- 0,
- &asn_DEF_gameId_2,
- memb_gameId_constraint_1,
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "gameId"
- },
-};
-static ber_tlv_tag_t asn_DEF_CleanerChatTypeGame_tags_1[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_TYPE_tag2member_t asn_MAP_CleanerChatTypeGame_tag2el_1[] = {
- { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* gameId at 51 */
-};
-static asn_SEQUENCE_specifics_t asn_SPC_CleanerChatTypeGame_specs_1 = {
- sizeof(struct CleanerChatTypeGame),
- offsetof(struct CleanerChatTypeGame, _asn_ctx),
- asn_MAP_CleanerChatTypeGame_tag2el_1,
- 1, /* Count of tags in the map */
- 0, 0, 0, /* Optional elements (not needed) */
- 0, /* Start extensions */
- 2 /* Stop extensions */
-};
-asn_TYPE_descriptor_t asn_DEF_CleanerChatTypeGame = {
- "CleanerChatTypeGame",
- "CleanerChatTypeGame",
- SEQUENCE_free,
- SEQUENCE_print,
- SEQUENCE_constraint,
- SEQUENCE_decode_ber,
- SEQUENCE_encode_der,
- SEQUENCE_decode_xer,
- SEQUENCE_encode_xer,
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
- asn_DEF_CleanerChatTypeGame_tags_1,
- sizeof(asn_DEF_CleanerChatTypeGame_tags_1)
- /sizeof(asn_DEF_CleanerChatTypeGame_tags_1[0]), /* 1 */
- asn_DEF_CleanerChatTypeGame_tags_1, /* Same as above */
- sizeof(asn_DEF_CleanerChatTypeGame_tags_1)
- /sizeof(asn_DEF_CleanerChatTypeGame_tags_1[0]), /* 1 */
- 0, /* No PER visible constraints */
- asn_MBR_CleanerChatTypeGame_1,
- 1, /* Elements count */
- &asn_SPC_CleanerChatTypeGame_specs_1 /* Additional specs */
-};
-
diff --git a/src/third_party/asn1/CleanerChatTypeGame.h b/src/third_party/asn1/CleanerChatTypeGame.h
deleted file mode 100644
index acd8084d..00000000
--- a/src/third_party/asn1/CleanerChatTypeGame.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Generated by asn1c-0.9.23 (http://lionet.info/asn1c)
- * From ASN.1 module "CHATCLEANER-PROTOCOL"
- * found in "../../../docs/chatcleaner.asn1"
- * `asn1c -fskeletons-copy`
- */
-
-#ifndef _CleanerChatTypeGame_H_
-#define _CleanerChatTypeGame_H_
-
-
-#include
-
-/* Including external dependencies */
-#include
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /* CleanerChatTypeGame */
- typedef struct CleanerChatTypeGame {
- unsigned long gameId;
- /*
- * This type is extensible,
- * possible extensions are below.
- */
-
- /* Context for parsing across buffer boundaries */
- asn_struct_ctx_t _asn_ctx;
- } CleanerChatTypeGame_t;
-
- /* Implementation */
- /* extern asn_TYPE_descriptor_t asn_DEF_gameId_2; // (Use -fall-defs-global to expose) */
- extern asn_TYPE_descriptor_t asn_DEF_CleanerChatTypeGame;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CleanerChatTypeGame_H_ */
-#include
diff --git a/src/third_party/asn1/CleanerChatTypeLobby.c b/src/third_party/asn1/CleanerChatTypeLobby.c
deleted file mode 100644
index c084df18..00000000
--- a/src/third_party/asn1/CleanerChatTypeLobby.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Generated by asn1c-0.9.23 (http://lionet.info/asn1c)
- * From ASN.1 module "CHATCLEANER-PROTOCOL"
- * found in "../../../docs/chatcleaner.asn1"
- * `asn1c -fskeletons-copy`
- */
-
-#include "CleanerChatTypeLobby.h"
-
-static ber_tlv_tag_t asn_DEF_CleanerChatTypeLobby_tags_1[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SEQUENCE_specifics_t asn_SPC_CleanerChatTypeLobby_specs_1 = {
- sizeof(struct CleanerChatTypeLobby),
- offsetof(struct CleanerChatTypeLobby, _asn_ctx),
- 0, /* No top level tags */
- 0, /* No tags in the map */
- 0, 0, 0, /* Optional elements (not needed) */
- -1, /* Start extensions */
- -1 /* Stop extensions */
-};
-asn_TYPE_descriptor_t asn_DEF_CleanerChatTypeLobby = {
- "CleanerChatTypeLobby",
- "CleanerChatTypeLobby",
- SEQUENCE_free,
- SEQUENCE_print,
- SEQUENCE_constraint,
- SEQUENCE_decode_ber,
- SEQUENCE_encode_der,
- SEQUENCE_decode_xer,
- SEQUENCE_encode_xer,
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
- asn_DEF_CleanerChatTypeLobby_tags_1,
- sizeof(asn_DEF_CleanerChatTypeLobby_tags_1)
- /sizeof(asn_DEF_CleanerChatTypeLobby_tags_1[0]), /* 1 */
- asn_DEF_CleanerChatTypeLobby_tags_1, /* Same as above */
- sizeof(asn_DEF_CleanerChatTypeLobby_tags_1)
- /sizeof(asn_DEF_CleanerChatTypeLobby_tags_1[0]), /* 1 */
- 0, /* No PER visible constraints */
- 0, 0, /* No members */
- &asn_SPC_CleanerChatTypeLobby_specs_1 /* Additional specs */
-};
-
diff --git a/src/third_party/asn1/CleanerChatTypeLobby.h b/src/third_party/asn1/CleanerChatTypeLobby.h
deleted file mode 100644
index 0c0ff8d8..00000000
--- a/src/third_party/asn1/CleanerChatTypeLobby.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Generated by asn1c-0.9.23 (http://lionet.info/asn1c)
- * From ASN.1 module "CHATCLEANER-PROTOCOL"
- * found in "../../../docs/chatcleaner.asn1"
- * `asn1c -fskeletons-copy`
- */
-
-#ifndef _CleanerChatTypeLobby_H_
-#define _CleanerChatTypeLobby_H_
-
-
-#include
-
-/* Including external dependencies */
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /* CleanerChatTypeLobby */
- typedef struct CleanerChatTypeLobby {
- /*
- * This type is extensible,
- * possible extensions are below.
- */
-
- /* Context for parsing across buffer boundaries */
- asn_struct_ctx_t _asn_ctx;
- } CleanerChatTypeLobby_t;
-
- /* Implementation */
- extern asn_TYPE_descriptor_t asn_DEF_CleanerChatTypeLobby;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CleanerChatTypeLobby_H_ */
-#include
diff --git a/src/third_party/asn1/CleanerInitAckMessage.c b/src/third_party/asn1/CleanerInitAckMessage.c
deleted file mode 100644
index 77305421..00000000
--- a/src/third_party/asn1/CleanerInitAckMessage.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Generated by asn1c-0.9.23 (http://lionet.info/asn1c)
- * From ASN.1 module "CHATCLEANER-PROTOCOL"
- * found in "../../../docs/chatcleaner.asn1"
- * `asn1c -fskeletons-copy`
- */
-
-#include "CleanerInitAckMessage.h"
-
-static int
-memb_serverVersion_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- long value;
-
- if(!sptr) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- value = *(const long *)sptr;
-
- if((value >= 0 && value <= 65535)) {
- /* Constraint check succeeded */
- return 0;
- } else {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: constraint failed (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-}
-
-static int
-memb_serverSecret_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- const UTF8String_t *st = (const UTF8String_t *)sptr;
- size_t size;
-
- if(!sptr) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- size = UTF8String_length(st);
- if((ssize_t)size < 0) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: UTF-8: broken encoding (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- if((size >= 1 && size <= 32)) {
- /* Constraint check succeeded */
- return 0;
- } else {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: constraint failed (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-}
-
-static asn_TYPE_member_t asn_MBR_CleanerInitAckMessage_1[] = {
- { ATF_NOFLAGS, 0, offsetof(struct CleanerInitAckMessage, serverVersion),
- (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
- 0,
- &asn_DEF_NativeInteger,
- memb_serverVersion_constraint_1,
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "serverVersion"
- },
- { ATF_NOFLAGS, 0, offsetof(struct CleanerInitAckMessage, serverSecret),
- (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)),
- 0,
- &asn_DEF_UTF8String,
- memb_serverSecret_constraint_1,
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "serverSecret"
- },
-};
-static ber_tlv_tag_t asn_DEF_CleanerInitAckMessage_tags_1[] = {
- (ASN_TAG_CLASS_APPLICATION | (1 << 2)),
- (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_TYPE_tag2member_t asn_MAP_CleanerInitAckMessage_tag2el_1[] = {
- { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* serverVersion at 38 */
- { (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)), 1, 0, 0 } /* serverSecret at 39 */
-};
-static asn_SEQUENCE_specifics_t asn_SPC_CleanerInitAckMessage_specs_1 = {
- sizeof(struct CleanerInitAckMessage),
- offsetof(struct CleanerInitAckMessage, _asn_ctx),
- asn_MAP_CleanerInitAckMessage_tag2el_1,
- 2, /* Count of tags in the map */
- 0, 0, 0, /* Optional elements (not needed) */
- 1, /* Start extensions */
- 3 /* Stop extensions */
-};
-asn_TYPE_descriptor_t asn_DEF_CleanerInitAckMessage = {
- "CleanerInitAckMessage",
- "CleanerInitAckMessage",
- SEQUENCE_free,
- SEQUENCE_print,
- SEQUENCE_constraint,
- SEQUENCE_decode_ber,
- SEQUENCE_encode_der,
- SEQUENCE_decode_xer,
- SEQUENCE_encode_xer,
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
- asn_DEF_CleanerInitAckMessage_tags_1,
- sizeof(asn_DEF_CleanerInitAckMessage_tags_1)
- /sizeof(asn_DEF_CleanerInitAckMessage_tags_1[0]) - 1, /* 1 */
- asn_DEF_CleanerInitAckMessage_tags_1, /* Same as above */
- sizeof(asn_DEF_CleanerInitAckMessage_tags_1)
- /sizeof(asn_DEF_CleanerInitAckMessage_tags_1[0]), /* 2 */
- 0, /* No PER visible constraints */
- asn_MBR_CleanerInitAckMessage_1,
- 2, /* Elements count */
- &asn_SPC_CleanerInitAckMessage_specs_1 /* Additional specs */
-};
-
diff --git a/src/third_party/asn1/CleanerInitAckMessage.h b/src/third_party/asn1/CleanerInitAckMessage.h
deleted file mode 100644
index a75efbc5..00000000
--- a/src/third_party/asn1/CleanerInitAckMessage.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Generated by asn1c-0.9.23 (http://lionet.info/asn1c)
- * From ASN.1 module "CHATCLEANER-PROTOCOL"
- * found in "../../../docs/chatcleaner.asn1"
- * `asn1c -fskeletons-copy`
- */
-
-#ifndef _CleanerInitAckMessage_H_
-#define _CleanerInitAckMessage_H_
-
-
-#include
-
-/* Including external dependencies */
-#include
-#include
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /* CleanerInitAckMessage */
- typedef struct CleanerInitAckMessage {
- long serverVersion;
- UTF8String_t serverSecret;
- /*
- * This type is extensible,
- * possible extensions are below.
- */
-
- /* Context for parsing across buffer boundaries */
- asn_struct_ctx_t _asn_ctx;
- } CleanerInitAckMessage_t;
-
- /* Implementation */
- extern asn_TYPE_descriptor_t asn_DEF_CleanerInitAckMessage;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CleanerInitAckMessage_H_ */
-#include
diff --git a/src/third_party/asn1/CleanerInitMessage.c b/src/third_party/asn1/CleanerInitMessage.c
deleted file mode 100644
index 882167b6..00000000
--- a/src/third_party/asn1/CleanerInitMessage.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Generated by asn1c-0.9.23 (http://lionet.info/asn1c)
- * From ASN.1 module "CHATCLEANER-PROTOCOL"
- * found in "../../../docs/chatcleaner.asn1"
- * `asn1c -fskeletons-copy`
- */
-
-#include "CleanerInitMessage.h"
-
-static int
-memb_requestedVersion_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- long value;
-
- if(!sptr) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- value = *(const long *)sptr;
-
- if((value >= 0 && value <= 65535)) {
- /* Constraint check succeeded */
- return 0;
- } else {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: constraint failed (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-}
-
-static int
-memb_clientSecret_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- const UTF8String_t *st = (const UTF8String_t *)sptr;
- size_t size;
-
- if(!sptr) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- size = UTF8String_length(st);
- if((ssize_t)size < 0) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: UTF-8: broken encoding (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- if((size >= 1 && size <= 32)) {
- /* Constraint check succeeded */
- return 0;
- } else {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: constraint failed (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-}
-
-static asn_TYPE_member_t asn_MBR_CleanerInitMessage_1[] = {
- { ATF_NOFLAGS, 0, offsetof(struct CleanerInitMessage, requestedVersion),
- (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
- 0,
- &asn_DEF_NativeInteger,
- memb_requestedVersion_constraint_1,
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "requestedVersion"
- },
- { ATF_NOFLAGS, 0, offsetof(struct CleanerInitMessage, clientSecret),
- (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)),
- 0,
- &asn_DEF_UTF8String,
- memb_clientSecret_constraint_1,
- 0, /* PER is not compiled, use -gen-PER */
- 0,
- "clientSecret"
- },
-};
-static ber_tlv_tag_t asn_DEF_CleanerInitMessage_tags_1[] = {
- (ASN_TAG_CLASS_APPLICATION | (0 << 2)),
- (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_TYPE_tag2member_t asn_MAP_CleanerInitMessage_tag2el_1[] = {
- { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* requestedVersion at 33 */
- { (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)), 1, 0, 0 } /* clientSecret at 34 */
-};
-static asn_SEQUENCE_specifics_t asn_SPC_CleanerInitMessage_specs_1 = {
- sizeof(struct CleanerInitMessage),
- offsetof(struct CleanerInitMessage, _asn_ctx),
- asn_MAP_CleanerInitMessage_tag2el_1,
- 2, /* Count of tags in the map */
- 0, 0, 0, /* Optional elements (not needed) */
- 1, /* Start extensions */
- 3 /* Stop extensions */
-};
-asn_TYPE_descriptor_t asn_DEF_CleanerInitMessage = {
- "CleanerInitMessage",
- "CleanerInitMessage",
- SEQUENCE_free,
- SEQUENCE_print,
- SEQUENCE_constraint,
- SEQUENCE_decode_ber,
- SEQUENCE_encode_der,
- SEQUENCE_decode_xer,
- SEQUENCE_encode_xer,
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
- asn_DEF_CleanerInitMessage_tags_1,
- sizeof(asn_DEF_CleanerInitMessage_tags_1)
- /sizeof(asn_DEF_CleanerInitMessage_tags_1[0]) - 1, /* 1 */
- asn_DEF_CleanerInitMessage_tags_1, /* Same as above */
- sizeof(asn_DEF_CleanerInitMessage_tags_1)
- /sizeof(asn_DEF_CleanerInitMessage_tags_1[0]), /* 2 */
- 0, /* No PER visible constraints */
- asn_MBR_CleanerInitMessage_1,
- 2, /* Elements count */
- &asn_SPC_CleanerInitMessage_specs_1 /* Additional specs */
-};
-
diff --git a/src/third_party/asn1/CleanerInitMessage.h b/src/third_party/asn1/CleanerInitMessage.h
deleted file mode 100644
index 154cea24..00000000
--- a/src/third_party/asn1/CleanerInitMessage.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Generated by asn1c-0.9.23 (http://lionet.info/asn1c)
- * From ASN.1 module "CHATCLEANER-PROTOCOL"
- * found in "../../../docs/chatcleaner.asn1"
- * `asn1c -fskeletons-copy`
- */
-
-#ifndef _CleanerInitMessage_H_
-#define _CleanerInitMessage_H_
-
-
-#include
-
-/* Including external dependencies */
-#include
-#include
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /* CleanerInitMessage */
- typedef struct CleanerInitMessage {
- long requestedVersion;
- UTF8String_t clientSecret;
- /*
- * This type is extensible,
- * possible extensions are below.
- */
-
- /* Context for parsing across buffer boundaries */
- asn_struct_ctx_t _asn_ctx;
- } CleanerInitMessage_t;
-
- /* Implementation */
- extern asn_TYPE_descriptor_t asn_DEF_CleanerInitMessage;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CleanerInitMessage_H_ */
-#include
diff --git a/src/third_party/asn1/INTEGER.c b/src/third_party/asn1/INTEGER.c
deleted file mode 100644
index a6a9734f..00000000
--- a/src/third_party/asn1/INTEGER.c
+++ /dev/null
@@ -1,975 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004, 2005, 2006, 2007 Lev Walkin .
- * All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#include
-#include
-#include /* Encoder and decoder of a primitive type */
-#include
-
-/*
- * INTEGER basic type description.
- */
-static ber_tlv_tag_t asn_DEF_INTEGER_tags[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_INTEGER = {
- "INTEGER",
- "INTEGER",
- ASN__PRIMITIVE_TYPE_free,
- INTEGER_print,
- asn_generic_no_constraint,
- ber_decode_primitive,
- INTEGER_encode_der,
- INTEGER_decode_xer,
- INTEGER_encode_xer,
- INTEGER_decode_uper, /* Unaligned PER decoder */
- INTEGER_encode_uper, /* Unaligned PER encoder */
- 0, /* Use generic outmost tag fetcher */
- asn_DEF_INTEGER_tags,
- sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]),
- asn_DEF_INTEGER_tags, /* Same as above */
- sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]),
- 0, /* No PER visible constraints */
- 0, 0, /* No members */
- 0 /* No specifics */
-};
-
-/*
- * Encode INTEGER type using DER.
- */
-asn_enc_rval_t
-INTEGER_encode_der(asn_TYPE_descriptor_t *td, void *sptr,
- int tag_mode, ber_tlv_tag_t tag,
- asn_app_consume_bytes_f *cb, void *app_key) {
- INTEGER_t *st = (INTEGER_t *)sptr;
-
- ASN_DEBUG("%s %s as INTEGER (tm=%d)",
- cb?"Encoding":"Estimating", td->name, tag_mode);
-
- /*
- * Canonicalize integer in the buffer.
- * (Remove too long sign extension, remove some first 0x00 bytes)
- */
- if(st->buf) {
- uint8_t *buf = st->buf;
- uint8_t *end1 = buf + st->size - 1;
- int shift;
-
- /* Compute the number of superfluous leading bytes */
- for(; buf < end1; buf++) {
- /*
- * If the contents octets of an integer value encoding
- * consist of more than one octet, then the bits of the
- * first octet and bit 8 of the second octet:
- * a) shall not all be ones; and
- * b) shall not all be zero.
- */
- switch(*buf) {
- case 0x00:
- if((buf[1] & 0x80) == 0)
- continue;
- break;
- case 0xff:
- if((buf[1] & 0x80))
- continue;
- break;
- }
- break;
- }
-
- /* Remove leading superfluous bytes from the integer */
- shift = buf - st->buf;
- if(shift) {
- uint8_t *nb = st->buf;
- uint8_t *end;
-
- st->size -= shift; /* New size, minus bad bytes */
- end = nb + st->size;
-
- for(; nb < end; nb++, buf++)
- *nb = *buf;
- }
-
- } /* if(1) */
-
- return der_encode_primitive(td, sptr, tag_mode, tag, cb, app_key);
-}
-
-static const asn_INTEGER_enum_map_t *INTEGER_map_enum2value(asn_INTEGER_specifics_t *specs, const char *lstart, const char *lstop);
-
-/*
- * INTEGER specific human-readable output.
- */
-static ssize_t
-INTEGER__dump(asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_bytes_f *cb, void *app_key, int plainOrXER) {
- asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
- char scratch[32]; /* Enough for 64-bit integer */
- uint8_t *buf = st->buf;
- uint8_t *buf_end = st->buf + st->size;
- signed long accum;
- ssize_t wrote = 0;
- char *p;
- int ret;
-
- /*
- * Advance buf pointer until the start of the value's body.
- * This will make us able to process large integers using simple case,
- * when the actual value is small
- * (0x0000000000abcdef would yield a fine 0x00abcdef)
- */
- /* Skip the insignificant leading bytes */
- for(; buf < buf_end-1; buf++) {
- switch(*buf) {
- case 0x00:
- if((buf[1] & 0x80) == 0) continue;
- break;
- case 0xff:
- if((buf[1] & 0x80) != 0) continue;
- break;
- }
- break;
- }
-
- /* Simple case: the integer size is small */
- if((size_t)(buf_end - buf) <= sizeof(accum)) {
- const asn_INTEGER_enum_map_t *el;
- size_t scrsize;
- char *scr;
-
- if(buf == buf_end) {
- accum = 0;
- } else {
- accum = (*buf & 0x80) ? -1 : 0;
- for(; buf < buf_end; buf++)
- accum = (accum << 8) | *buf;
- }
-
- el = INTEGER_map_value2enum(specs, accum);
- if(el) {
- scrsize = el->enum_len + 32;
- scr = (char *)alloca(scrsize);
- if(plainOrXER == 0)
- ret = snprintf(scr, scrsize,
- "%ld (%s)", accum, el->enum_name);
- else
- ret = snprintf(scr, scrsize,
- "<%s/>", el->enum_name);
- } else if(plainOrXER && specs && specs->strict_enumeration) {
- ASN_DEBUG("ASN.1 forbids dealing with "
- "unknown value of ENUMERATED type");
- errno = EPERM;
- return -1;
- } else {
- scrsize = sizeof(scratch);
- scr = scratch;
- ret = snprintf(scr, scrsize,
- (specs && specs->field_unsigned)
- ?"%lu":"%ld", accum);
- }
- assert(ret > 0 && (size_t)ret < scrsize);
- return (cb(scr, ret, app_key) < 0) ? -1 : ret;
- } else if(plainOrXER && specs && specs->strict_enumeration) {
- /*
- * Here and earlier, we cannot encode the ENUMERATED values
- * if there is no corresponding identifier.
- */
- ASN_DEBUG("ASN.1 forbids dealing with "
- "unknown value of ENUMERATED type");
- errno = EPERM;
- return -1;
- }
-
- /* Output in the long xx:yy:zz... format */
- /* TODO: replace with generic algorithm (Knuth TAOCP Vol 2, 4.3.1) */
- for(p = scratch; buf < buf_end; buf++) {
- static const char *h2c = "0123456789ABCDEF";
- if((p - scratch) >= (ssize_t)(sizeof(scratch) - 4)) {
- /* Flush buffer */
- if(cb(scratch, p - scratch, app_key) < 0)
- return -1;
- wrote += p - scratch;
- p = scratch;
- }
- *p++ = h2c[*buf >> 4];
- *p++ = h2c[*buf & 0x0F];
- *p++ = 0x3a; /* ":" */
- }
- if(p != scratch)
- p--; /* Remove the last ":" */
-
- wrote += p - scratch;
- return (cb(scratch, p - scratch, app_key) < 0) ? -1 : wrote;
-}
-
-/*
- * INTEGER specific human-readable output.
- */
-int
-INTEGER_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
- asn_app_consume_bytes_f *cb, void *app_key) {
- const INTEGER_t *st = (const INTEGER_t *)sptr;
- ssize_t ret;
-
- (void)td;
- (void)ilevel;
-
- if(!st || !st->buf)
- ret = cb("", 8, app_key);
- else
- ret = INTEGER__dump(td, st, cb, app_key, 0);
-
- return (ret < 0) ? -1 : 0;
-}
-
-struct e2v_key {
- const char *start;
- const char *stop;
- asn_INTEGER_enum_map_t *vemap;
- unsigned int *evmap;
-};
-static int
-INTEGER__compar_enum2value(const void *kp, const void *am) {
- const struct e2v_key *key = (const struct e2v_key *)kp;
- const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am;
- const char *ptr, *end, *name;
-
- /* Remap the element (sort by different criterion) */
- el = key->vemap + key->evmap[el - key->vemap];
-
- /* Compare strings */
- for(ptr = key->start, end = key->stop, name = el->enum_name;
- ptr < end; ptr++, name++) {
- if(*ptr != *name)
- return *(const unsigned char *)ptr
- - *(const unsigned char *)name;
- }
- return name[0] ? -1 : 0;
-}
-
-static const asn_INTEGER_enum_map_t *
-INTEGER_map_enum2value(asn_INTEGER_specifics_t *specs, const char *lstart, const char *lstop) {
- asn_INTEGER_enum_map_t *el_found;
- int count = specs ? specs->map_count : 0;
- struct e2v_key key;
- const char *lp;
-
- if(!count) return NULL;
-
- /* Guaranteed: assert(lstart < lstop); */
- /* Figure out the tag name */
- for(lstart++, lp = lstart; lp < lstop; lp++) {
- switch(*lp) {
- case 9:
- case 10:
- case 11:
- case 12:
- case 13:
- case 32: /* WSP */
- case 0x2f: /* '/' */
- case 0x3e: /* '>' */
- break;
- default:
- continue;
- }
- break;
- }
- if(lp == lstop) return NULL; /* No tag found */
- lstop = lp;
-
- key.start = lstart;
- key.stop = lstop;
- key.vemap = specs->value2enum;
- key.evmap = specs->enum2value;
- el_found = (asn_INTEGER_enum_map_t *)bsearch(&key,
- specs->value2enum, count, sizeof(specs->value2enum[0]),
- INTEGER__compar_enum2value);
- if(el_found) {
- /* Remap enum2value into value2enum */
- el_found = key.vemap + key.evmap[el_found - key.vemap];
- }
- return el_found;
-}
-
-static int
-INTEGER__compar_value2enum(const void *kp, const void *am) {
- long a = *(const long *)kp;
- const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am;
- long b = el->nat_value;
- if(a < b) return -1;
- else if(a == b) return 0;
- else return 1;
-}
-
-const asn_INTEGER_enum_map_t *
-INTEGER_map_value2enum(asn_INTEGER_specifics_t *specs, long value) {
- int count = specs ? specs->map_count : 0;
- if(!count) return 0;
- return (asn_INTEGER_enum_map_t *)bsearch(&value, specs->value2enum,
- count, sizeof(specs->value2enum[0]),
- INTEGER__compar_value2enum);
-}
-
-static int
-INTEGER_st_prealloc(INTEGER_t *st, int min_size) {
- void *p = MALLOC(min_size + 1);
- if(p) {
- void *b = st->buf;
- st->size = 0;
- st->buf = p;
- FREEMEM(b);
- return 0;
- } else {
- return -1;
- }
-}
-
-/*
- * Decode the chunk of XML text encoding INTEGER.
- */
-static enum xer_pbd_rval
-INTEGER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_buf, size_t chunk_size) {
- INTEGER_t *st = (INTEGER_t *)sptr;
- long sign = 1;
- long value;
- const char *lp;
- const char *lstart = (const char *)chunk_buf;
- const char *lstop = lstart + chunk_size;
- enum {
- ST_SKIPSPACE,
- ST_SKIPSPHEX,
- ST_WAITDIGITS,
- ST_DIGITS,
- ST_HEXDIGIT1,
- ST_HEXDIGIT2,
- ST_HEXCOLON,
- ST_EXTRASTUFF
- } state = ST_SKIPSPACE;
-
- if(chunk_size)
- ASN_DEBUG("INTEGER body %ld 0x%2x..0x%2x",
- (long)chunk_size, *lstart, lstop[-1]);
-
- /*
- * We may have received a tag here. It will be processed inline.
- * Use strtoul()-like code and serialize the result.
- */
- for(value = 0, lp = lstart; lp < lstop; lp++) {
- int lv = *lp;
- switch(lv) {
- case 0x09:
- case 0x0a:
- case 0x0d:
- case 0x20:
- switch(state) {
- case ST_SKIPSPACE:
- case ST_SKIPSPHEX:
- continue;
- case ST_HEXCOLON:
- if(xer_is_whitespace(lp, lstop - lp)) {
- lp = lstop - 1;
- continue;
- }
- break;
- default:
- break;
- }
- break;
- case 0x2d: /* '-' */
- if(state == ST_SKIPSPACE) {
- sign = -1;
- state = ST_WAITDIGITS;
- continue;
- }
- break;
- case 0x2b: /* '+' */
- if(state == ST_SKIPSPACE) {
- state = ST_WAITDIGITS;
- continue;
- }
- break;
- case 0x30:
- case 0x31:
- case 0x32:
- case 0x33:
- case 0x34:
- case 0x35:
- case 0x36:
- case 0x37:
- case 0x38:
- case 0x39:
- switch(state) {
- case ST_DIGITS:
- break;
- case ST_SKIPSPHEX: /* Fall through */
- case ST_HEXDIGIT1:
- value = (lv - 0x30) << 4;
- state = ST_HEXDIGIT2;
- continue;
- case ST_HEXDIGIT2:
- value += (lv - 0x30);
- state = ST_HEXCOLON;
- st->buf[st->size++] = (uint8_t)value;
- continue;
- case ST_HEXCOLON:
- return XPBD_BROKEN_ENCODING;
- default:
- state = ST_DIGITS;
- break;
- }
-
- {
- long new_value = value * 10;
-
- if(new_value / 10 != value)
- /* Overflow */
- return XPBD_DECODER_LIMIT;
-
- value = new_value + (lv - 0x30);
- /* Check for two's complement overflow */
- if(value < 0) {
- /* Check whether it is a LONG_MIN */
- if(sign == -1
- && (unsigned long)value
- == ~((unsigned long)-1 >> 1)) {
- sign = 1;
- } else {
- /* Overflow */
- return XPBD_DECODER_LIMIT;
- }
- }
- }
- continue;
- case 0x3c: /* '<' */
- if(state == ST_SKIPSPACE) {
- const asn_INTEGER_enum_map_t *el;
- el = INTEGER_map_enum2value(
- (asn_INTEGER_specifics_t *)
- td->specifics, lstart, lstop);
- if(el) {
- ASN_DEBUG("Found \"%s\" => %ld",
- el->enum_name, el->nat_value);
- state = ST_DIGITS;
- value = el->nat_value;
- lp = lstop - 1;
- continue;
- }
- ASN_DEBUG("Unknown identifier for INTEGER");
- }
- return XPBD_BROKEN_ENCODING;
- case 0x3a: /* ':' */
- if(state == ST_HEXCOLON) {
- /* This colon is expected */
- state = ST_HEXDIGIT1;
- continue;
- } else if(state == ST_DIGITS) {
- /* The colon here means that we have
- * decoded the first two hexadecimal
- * places as a decimal value.
- * Switch decoding mode. */
- ASN_DEBUG("INTEGER re-evaluate as hex form");
- if(INTEGER_st_prealloc(st, (chunk_size/3) + 1))
- return XPBD_SYSTEM_FAILURE;
- state = ST_SKIPSPHEX;
- lp = lstart - 1;
- continue;
- } else {
- ASN_DEBUG("state %d at %ld", state, (long)(lp - lstart));
- break;
- }
- /* [A-Fa-f] */
- case 0x41:
- case 0x42:
- case 0x43:
- case 0x44:
- case 0x45:
- case 0x46:
- case 0x61:
- case 0x62:
- case 0x63:
- case 0x64:
- case 0x65:
- case 0x66:
- switch(state) {
- case ST_SKIPSPHEX:
- case ST_SKIPSPACE: /* Fall through */
- case ST_HEXDIGIT1:
- value = lv - ((lv < 0x61) ? 0x41 : 0x61);
- value += 10;
- value <<= 4;
- state = ST_HEXDIGIT2;
- continue;
- case ST_HEXDIGIT2:
- value += lv - ((lv < 0x61) ? 0x41 : 0x61);
- value += 10;
- st->buf[st->size++] = (uint8_t)value;
- state = ST_HEXCOLON;
- continue;
- case ST_DIGITS:
- ASN_DEBUG("INTEGER re-evaluate as hex form");
- if(INTEGER_st_prealloc(st, (chunk_size/3) + 1))
- return XPBD_SYSTEM_FAILURE;
- state = ST_SKIPSPHEX;
- lp = lstart - 1;
- continue;
- default:
- break;
- }
- break;
- }
-
- /* Found extra non-numeric stuff */
- ASN_DEBUG("Found non-numeric 0x%2x at %ld",
- lv, (long)(lp - lstart));
- state = ST_EXTRASTUFF;
- break;
- }
-
- switch(state) {
- case ST_DIGITS:
- /* Everything is cool */
- break;
- case ST_HEXCOLON:
- st->buf[st->size] = 0; /* Just in case termination */
- return XPBD_BODY_CONSUMED;
- case ST_HEXDIGIT1:
- case ST_HEXDIGIT2:
- case ST_SKIPSPHEX:
- return XPBD_BROKEN_ENCODING;
- default:
- if(xer_is_whitespace(lp, lstop - lp)) {
- if(state != ST_EXTRASTUFF)
- return XPBD_NOT_BODY_IGNORE;
- break;
- } else {
- ASN_DEBUG("INTEGER: No useful digits (state %d)",
- state);
- return XPBD_BROKEN_ENCODING; /* No digits */
- }
- break;
- }
-
- value *= sign; /* Change sign, if needed */
-
- if(asn_long2INTEGER(st, value))
- return XPBD_SYSTEM_FAILURE;
-
- return XPBD_BODY_CONSUMED;
-}
-
-asn_dec_rval_t
-INTEGER_decode_xer(asn_codec_ctx_t *opt_codec_ctx,
- asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname,
- const void *buf_ptr, size_t size) {
-
- return xer_decode_primitive(opt_codec_ctx, td,
- sptr, sizeof(INTEGER_t), opt_mname,
- buf_ptr, size, INTEGER__xer_body_decode);
-}
-
-asn_enc_rval_t
-INTEGER_encode_xer(asn_TYPE_descriptor_t *td, void *sptr,
- int ilevel, enum xer_encoder_flags_e flags,
- asn_app_consume_bytes_f *cb, void *app_key) {
- const INTEGER_t *st = (const INTEGER_t *)sptr;
- asn_enc_rval_t er;
-
- (void)ilevel;
- (void)flags;
-
- if(!st || !st->buf)
- _ASN_ENCODE_FAILED;
-
- er.encoded = INTEGER__dump(td, st, cb, app_key, 1);
- if(er.encoded < 0) _ASN_ENCODE_FAILED;
-
- _ASN_ENCODED_OK(er);
-}
-
-asn_dec_rval_t
-INTEGER_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
- asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
- asn_dec_rval_t rval = { RC_OK, 0 };
- INTEGER_t *st = (INTEGER_t *)*sptr;
- asn_per_constraint_t *ct;
- int repeat;
-
- (void)opt_codec_ctx;
-
- if(!st) {
- st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st)));
- if(!st) _ASN_DECODE_FAILED;
- }
-
- if(!constraints) constraints = td->per_constraints;
- ct = constraints ? &constraints->value : 0;
-
- if(ct && ct->flags & APC_EXTENSIBLE) {
- int inext = per_get_few_bits(pd, 1);
- if(inext < 0) _ASN_DECODE_STARVED;
- if(inext) ct = 0;
- }
-
- FREEMEM(st->buf);
- st->buf = 0;
- st->size = 0;
- if(ct) {
- if(ct->flags & APC_SEMI_CONSTRAINED) {
- st->buf = (uint8_t *)CALLOC(1, 2);
- if(!st->buf) _ASN_DECODE_FAILED;
- st->size = 1;
- } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) {
- size_t size = (ct->range_bits + 7) >> 3;
- st->buf = (uint8_t *)MALLOC(1 + size + 1);
- if(!st->buf) _ASN_DECODE_FAILED;
- st->size = size;
- }
- }
-
- /* X.691, #12.2.2 */
- if(ct && ct->flags != APC_UNCONSTRAINED) {
- /* #10.5.6 */
- ASN_DEBUG("Integer with range %d bits", ct->range_bits);
- if(ct->range_bits >= 0) {
- long value;
- if(ct->range_bits == 32) {
- long lhalf;
- value = per_get_few_bits(pd, 16);
- if(value < 0) _ASN_DECODE_STARVED;
- lhalf = per_get_few_bits(pd, 16);
- if(lhalf < 0) _ASN_DECODE_STARVED;
- value = (value << 16) | lhalf;
- } else {
- value = per_get_few_bits(pd, ct->range_bits);
- if(value < 0) _ASN_DECODE_STARVED;
- }
- ASN_DEBUG("Got value %ld + low %ld",
- value, ct->lower_bound);
- value += ct->lower_bound;
- if((specs && specs->field_unsigned)
- ? asn_ulong2INTEGER(st, value)
- : asn_long2INTEGER(st, value))
- _ASN_DECODE_FAILED;
- return rval;
- }
- } else {
- ASN_DEBUG("Decoding unconstrained integer %s", td->name);
- }
-
- /* X.691, #12.2.3, #12.2.4 */
- do {
- ssize_t len;
- void *p;
- int ret;
-
- /* Get the PER length */
- len = uper_get_length(pd, -1, &repeat);
- if(len < 0) _ASN_DECODE_STARVED;
-
- p = REALLOC(st->buf, st->size + len + 1);
- if(!p) _ASN_DECODE_FAILED;
- st->buf = (uint8_t *)p;
-
- ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len);
- if(ret < 0) _ASN_DECODE_STARVED;
- st->size += len;
- } while(repeat);
- st->buf[st->size] = 0; /* JIC */
-
- /* #12.2.3 */
- if(ct && ct->lower_bound) {
- /*
- * TODO: replace by in-place arithmetics.
- */
- long value;
- if(asn_INTEGER2long(st, &value))
- _ASN_DECODE_FAILED;
- if(asn_long2INTEGER(st, value + ct->lower_bound))
- _ASN_DECODE_FAILED;
- }
-
- return rval;
-}
-
-asn_enc_rval_t
-INTEGER_encode_uper(asn_TYPE_descriptor_t *td,
- asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) {
- asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
- asn_enc_rval_t er;
- INTEGER_t *st = (INTEGER_t *)sptr;
- const uint8_t *buf;
- const uint8_t *end;
- asn_per_constraint_t *ct;
- long value = 0;
-
- if(!st || st->size == 0) _ASN_ENCODE_FAILED;
-
- if(!constraints) constraints = td->per_constraints;
- ct = constraints ? &constraints->value : 0;
-
- er.encoded = 0;
-
- if(ct) {
- int inext = 0;
- if(specs && specs->field_unsigned) {
- unsigned long uval;
- if(asn_INTEGER2ulong(st, &uval))
- _ASN_ENCODE_FAILED;
- /* Check proper range */
- if(ct->flags & APC_SEMI_CONSTRAINED) {
- if(uval < (unsigned long)ct->lower_bound)
- inext = 1;
- } else if(ct->range_bits >= 0) {
- if(uval < (unsigned long)ct->lower_bound
- || uval > (unsigned long)ct->upper_bound)
- inext = 1;
- }
- ASN_DEBUG("Value %lu (%02x/%d) lb %lu ub %lu %s",
- uval, st->buf[0], st->size,
- ct->lower_bound, ct->upper_bound,
- inext ? "ext" : "fix");
- value = uval;
- } else {
- if(asn_INTEGER2long(st, &value))
- _ASN_ENCODE_FAILED;
- /* Check proper range */
- if(ct->flags & APC_SEMI_CONSTRAINED) {
- if(value < ct->lower_bound)
- inext = 1;
- } else if(ct->range_bits >= 0) {
- if(value < ct->lower_bound
- || value > ct->upper_bound)
- inext = 1;
- }
- ASN_DEBUG("Value %ld (%02x/%d) lb %ld ub %ld %s",
- value, st->buf[0], st->size,
- ct->lower_bound, ct->upper_bound,
- inext ? "ext" : "fix");
- }
- if(ct->flags & APC_EXTENSIBLE) {
- if(per_put_few_bits(po, inext, 1))
- _ASN_ENCODE_FAILED;
- if(inext) ct = 0;
- } else if(inext) {
- _ASN_ENCODE_FAILED;
- }
- }
-
-
- /* X.691, #12.2.2 */
- if(ct && ct->range_bits >= 0) {
- /* #10.5.6 */
- ASN_DEBUG("Encoding integer with range %d bits",
- ct->range_bits);
- if(ct->range_bits == 32) {
- /* TODO: extend to >32 bits */
- long v = value - ct->lower_bound;
- if(per_put_few_bits(po, v >> 1, 31)
- || per_put_few_bits(po, v, 1))
- _ASN_ENCODE_FAILED;
- } else {
- if(per_put_few_bits(po, value - ct->lower_bound,
- ct->range_bits))
- _ASN_ENCODE_FAILED;
- }
- _ASN_ENCODED_OK(er);
- }
-
- if(ct && ct->lower_bound) {
- ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound);
- /* TODO: adjust lower bound */
- _ASN_ENCODE_FAILED;
- }
-
- for(buf = st->buf, end = st->buf + st->size; buf < end;) {
- ssize_t mayEncode = uper_put_length(po, end - buf);
- if(mayEncode < 0)
- _ASN_ENCODE_FAILED;
- if(per_put_many_bits(po, buf, 8 * mayEncode))
- _ASN_ENCODE_FAILED;
- buf += mayEncode;
- }
-
- _ASN_ENCODED_OK(er);
-}
-
-int
-asn_INTEGER2long(const INTEGER_t *iptr, long *lptr) {
- uint8_t *b, *end;
- size_t size;
- long l;
-
- /* Sanity checking */
- if(!iptr || !iptr->buf || !lptr) {
- errno = EINVAL;
- return -1;
- }
-
- /* Cache the begin/end of the buffer */
- b = iptr->buf; /* Start of the INTEGER buffer */
- size = iptr->size;
- end = b + size; /* Where to stop */
-
- if(size > sizeof(long)) {
- uint8_t *end1 = end - 1;
- /*
- * Slightly more advanced processing,
- * able to >sizeof(long) bytes,
- * when the actual value is small
- * (0x0000000000abcdef would yield a fine 0x00abcdef)
- */
- /* Skip out the insignificant leading bytes */
- for(; b < end1; b++) {
- switch(*b) {
- case 0x00:
- if((b[1] & 0x80) == 0) continue;
- break;
- case 0xff:
- if((b[1] & 0x80) != 0) continue;
- break;
- }
- break;
- }
-
- size = end - b;
- if(size > sizeof(long)) {
- /* Still cannot fit the long */
- errno = ERANGE;
- return -1;
- }
- }
-
- /* Shortcut processing of a corner case */
- if(end == b) {
- *lptr = 0;
- return 0;
- }
-
- /* Perform the sign initialization */
- /* Actually l = -(*b >> 7); gains nothing, yet unreadable! */
- if((*b >> 7)) l = -1;
- else l = 0;
-
- /* Conversion engine */
- for(; b < end; b++)
- l = (l << 8) | *b;
-
- *lptr = l;
- return 0;
-}
-
-int
-asn_INTEGER2ulong(const INTEGER_t *iptr, unsigned long *lptr) {
- uint8_t *b, *end;
- unsigned long l;
- size_t size;
-
- if(!iptr || !iptr->buf || !lptr) {
- errno = EINVAL;
- return -1;
- }
-
- b = iptr->buf;
- size = iptr->size;
- end = b + size;
-
- /* If all extra leading bytes are zeroes, ignore them */
- for(; size > sizeof(unsigned long); b++, size--) {
- if(*b) {
- /* Value won't fit unsigned long */
- errno = ERANGE;
- return -1;
- }
- }
-
- /* Conversion engine */
- for(l = 0; b < end; b++)
- l = (l << 8) | *b;
-
- *lptr = l;
- return 0;
-}
-
-int
-asn_ulong2INTEGER(INTEGER_t *st, unsigned long value) {
- uint8_t *buf;
- uint8_t *end;
- uint8_t *b;
- int shr;
-
- if(value <= LONG_MAX)
- return asn_long2INTEGER(st, value);
-
- buf = (uint8_t *)MALLOC(1 + sizeof(value));
- if(!buf) return -1;
-
- end = buf + (sizeof(value) + 1);
- buf[0] = 0;
- for(b = buf + 1, shr = (sizeof(long)-1)*8; b < end; shr -= 8, b++)
- *b = (uint8_t)(value >> shr);
-
- if(st->buf) FREEMEM(st->buf);
- st->buf = buf;
- st->size = 1 + sizeof(value);
-
- return 0;
-}
-
-int
-asn_long2INTEGER(INTEGER_t *st, long value) {
- uint8_t *buf, *bp;
- uint8_t *p;
- uint8_t *pstart;
- uint8_t *pend1;
- int littleEndian = 1; /* Run-time detection */
- int add;
-
- if(!st) {
- errno = EINVAL;
- return -1;
- }
-
- buf = (uint8_t *)MALLOC(sizeof(value));
- if(!buf) return -1;
-
- if(*(char *)&littleEndian) {
- pstart = (uint8_t *)&value + sizeof(value) - 1;
- pend1 = (uint8_t *)&value;
- add = -1;
- } else {
- pstart = (uint8_t *)&value;
- pend1 = pstart + sizeof(value) - 1;
- add = 1;
- }
-
- /*
- * If the contents octet consists of more than one octet,
- * then bits of the first octet and bit 8 of the second octet:
- * a) shall not all be ones; and
- * b) shall not all be zero.
- */
- for(p = pstart; p != pend1; p += add) {
- switch(*p) {
- case 0x00:
- if((*(p+add) & 0x80) == 0)
- continue;
- break;
- case 0xff:
- if((*(p+add) & 0x80))
- continue;
- break;
- }
- break;
- }
- /* Copy the integer body */
- for(pstart = p, bp = buf, pend1 += add; p != pend1; p += add)
- *bp++ = *p;
-
- if(st->buf) FREEMEM(st->buf);
- st->buf = buf;
- st->size = bp - buf;
-
- return 0;
-}
diff --git a/src/third_party/asn1/INTEGER.h b/src/third_party/asn1/INTEGER.h
deleted file mode 100644
index 8da5b18d..00000000
--- a/src/third_party/asn1/INTEGER.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*-
- * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#ifndef _INTEGER_H_
-#define _INTEGER_H_
-
-#include
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- typedef ASN__PRIMITIVE_TYPE_t INTEGER_t;
-
- extern asn_TYPE_descriptor_t asn_DEF_INTEGER;
-
- /* Map with to integer value association */
- typedef struct asn_INTEGER_enum_map_s {
- long nat_value; /* associated native integer value */
- size_t enum_len; /* strlen("tag") */
- const char *enum_name; /* "tag" */
- } asn_INTEGER_enum_map_t;
-
- /* This type describes an enumeration for INTEGER and ENUMERATED types */
- typedef struct asn_INTEGER_specifics_s {
- asn_INTEGER_enum_map_t *value2enum; /* N -> "tag"; sorted by N */
- unsigned int *enum2value; /* "tag" => N; sorted by tag */
- int map_count; /* Elements in either map */
- int extension; /* This map is extensible */
- int strict_enumeration; /* Enumeration set is fixed */
- int field_width; /* Size of native integer */
- int field_unsigned; /* Signed=0, unsigned=1 */
- } asn_INTEGER_specifics_t;
-
- asn_struct_print_f INTEGER_print;
- ber_type_decoder_f INTEGER_decode_ber;
- der_type_encoder_f INTEGER_encode_der;
- xer_type_decoder_f INTEGER_decode_xer;
- xer_type_encoder_f INTEGER_encode_xer;
- per_type_decoder_f INTEGER_decode_uper;
- per_type_encoder_f INTEGER_encode_uper;
-
- /***********************************
- * Some handy conversion routines. *
- ***********************************/
-
- /*
- * Returns 0 if it was possible to convert, -1 otherwise.
- * -1/EINVAL: Mandatory argument missing
- * -1/ERANGE: Value encoded is out of range for long representation
- * -1/ENOMEM: Memory allocation failed (in asn_long2INTEGER()).
- */
- int asn_INTEGER2long(const INTEGER_t *i, long *l);
- int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l);
- int asn_long2INTEGER(INTEGER_t *i, long l);
- int asn_ulong2INTEGER(INTEGER_t *i, unsigned long l);
-
- /*
- * Convert the integer value into the corresponding enumeration map entry.
- */
- const asn_INTEGER_enum_map_t *INTEGER_map_value2enum(asn_INTEGER_specifics_t *specs, long value);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _INTEGER_H_ */
diff --git a/src/third_party/asn1/Makefile b/src/third_party/asn1/Makefile
deleted file mode 100644
index b284b36b..00000000
--- a/src/third_party/asn1/Makefile
+++ /dev/null
@@ -1,258 +0,0 @@
-ASN_MODULE_SOURCES= \
- PokerTHMessage.c \
- InitMessage.c \
- Version.c \
- AnonymousLogin.c \
- AuthenticatedLogin.c \
- StatisticsLogin.c \
- InitAckMessage.c \
- AvatarRequestMessage.c \
- AvatarReplyMessage.c \
- AvatarHeader.c \
- AvatarData.c \
- AvatarEnd.c \
- UnknownAvatar.c \
- AvatarHash.c \
- NetAvatarType.c \
- GameListMessage.c \
- GameListNew.c \
- GameListUpdate.c \
- GameListPlayerJoined.c \
- GameListPlayerLeft.c \
- GameListAdminChanged.c \
- NetGameMode.c \
- PlayerInfoRequestMessage.c \
- PlayerInfoReplyMessage.c \
- PlayerInfoData.c \
- UnknownPlayerInfo.c \
- SubscriptionRequestMessage.c \
- JoinGameRequestMessage.c \
- JoinExistingGame.c \
- JoinNewGame.c \
- JoinGameReplyMessage.c \
- JoinGameAck.c \
- JoinGameFailed.c \
- NetGameInfo.c \
- GamePlayerMessage.c \
- GamePlayerJoined.c \
- GamePlayerLeft.c \
- GameAdminChanged.c \
- RemovedFromGame.c \
- KickPlayerRequestMessage.c \
- LeaveGameRequestMessage.c \
- StartEventMessage.c \
- StartEventAckMessage.c \
- GameStartMessage.c \
- HandStartMessage.c \
- PlayersTurnMessage.c \
- MyActionRequestMessage.c \
- YourActionRejectedMessage.c \
- PlayersActionDoneMessage.c \
- DealFlopCardsMessage.c \
- DealTurnCardMessage.c \
- DealRiverCardMessage.c \
- AllInShowCardsMessage.c \
- PlayerAllIn.c \
- EndOfHandMessage.c \
- EndOfHandShowCards.c \
- PlayerResult.c \
- EndOfHandHideCards.c \
- EndOfGameMessage.c \
- AskKickPlayerMessage.c \
- AskKickDeniedMessage.c \
- StartKickPetitionMessage.c \
- VoteKickRequestMessage.c \
- VoteKickReplyMessage.c \
- VoteKickAck.c \
- VoteKickDenied.c \
- KickPetitionUpdateMessage.c \
- EndKickPetitionMessage.c \
- StatisticsMessage.c \
- StatisticsData.c \
- ChatRequestMessage.c \
- ChatMessage.c \
- DialogMessage.c \
- TimeoutWarningMessage.c \
- ResetTimeoutMessage.c \
- ErrorMessage.c \
- NetGameState.c \
- NetPlayerAction.c \
- NonZeroId.c \
- Id.c \
- Guid.c \
- Card.c
-
-ASN_MODULE_HEADERS= \
- PokerTHMessage.h \
- InitMessage.h \
- Version.h \
- AnonymousLogin.h \
- AuthenticatedLogin.h \
- StatisticsLogin.h \
- InitAckMessage.h \
- AvatarRequestMessage.h \
- AvatarReplyMessage.h \
- AvatarHeader.h \
- AvatarData.h \
- AvatarEnd.h \
- UnknownAvatar.h \
- AvatarHash.h \
- NetAvatarType.h \
- GameListMessage.h \
- GameListNew.h \
- GameListUpdate.h \
- GameListPlayerJoined.h \
- GameListPlayerLeft.h \
- GameListAdminChanged.h \
- NetGameMode.h \
- PlayerInfoRequestMessage.h \
- PlayerInfoReplyMessage.h \
- PlayerInfoData.h \
- UnknownPlayerInfo.h \
- SubscriptionRequestMessage.h \
- JoinGameRequestMessage.h \
- JoinExistingGame.h \
- JoinNewGame.h \
- JoinGameReplyMessage.h \
- JoinGameAck.h \
- JoinGameFailed.h \
- NetGameInfo.h \
- GamePlayerMessage.h \
- GamePlayerJoined.h \
- GamePlayerLeft.h \
- GameAdminChanged.h \
- RemovedFromGame.h \
- KickPlayerRequestMessage.h \
- LeaveGameRequestMessage.h \
- StartEventMessage.h \
- StartEventAckMessage.h \
- GameStartMessage.h \
- HandStartMessage.h \
- PlayersTurnMessage.h \
- MyActionRequestMessage.h \
- YourActionRejectedMessage.h \
- PlayersActionDoneMessage.h \
- DealFlopCardsMessage.h \
- DealTurnCardMessage.h \
- DealRiverCardMessage.h \
- AllInShowCardsMessage.h \
- PlayerAllIn.h \
- EndOfHandMessage.h \
- EndOfHandShowCards.h \
- PlayerResult.h \
- EndOfHandHideCards.h \
- EndOfGameMessage.h \
- AskKickPlayerMessage.h \
- AskKickDeniedMessage.h \
- StartKickPetitionMessage.h \
- VoteKickRequestMessage.h \
- VoteKickReplyMessage.h \
- VoteKickAck.h \
- VoteKickDenied.h \
- KickPetitionUpdateMessage.h \
- EndKickPetitionMessage.h \
- StatisticsMessage.h \
- StatisticsData.h \
- ChatRequestMessage.h \
- ChatMessage.h \
- DialogMessage.h \
- TimeoutWarningMessage.h \
- ResetTimeoutMessage.h \
- ErrorMessage.h \
- NetGameState.h \
- NetPlayerAction.h \
- NonZeroId.h \
- Id.h \
- Guid.h \
- Card.h
-
-ASN_MODULE_HEADERS+=UTF8String.h
-ASN_MODULE_HEADERS+=BOOLEAN.h
-ASN_MODULE_SOURCES+=BOOLEAN.c
-ASN_MODULE_HEADERS+=INTEGER.h
-ASN_MODULE_HEADERS+=NativeEnumerated.h
-ASN_MODULE_SOURCES+=INTEGER.c
-ASN_MODULE_SOURCES+=NativeEnumerated.c
-ASN_MODULE_HEADERS+=NativeInteger.h
-ASN_MODULE_SOURCES+=NativeInteger.c
-ASN_MODULE_SOURCES+=UTF8String.c
-ASN_MODULE_HEADERS+=asn_SEQUENCE_OF.h
-ASN_MODULE_SOURCES+=asn_SEQUENCE_OF.c
-ASN_MODULE_HEADERS+=asn_SET_OF.h
-ASN_MODULE_SOURCES+=asn_SET_OF.c
-ASN_MODULE_HEADERS+=constr_CHOICE.h
-ASN_MODULE_SOURCES+=constr_CHOICE.c
-ASN_MODULE_HEADERS+=constr_SEQUENCE.h
-ASN_MODULE_SOURCES+=constr_SEQUENCE.c
-ASN_MODULE_HEADERS+=constr_SEQUENCE_OF.h
-ASN_MODULE_SOURCES+=constr_SEQUENCE_OF.c
-ASN_MODULE_HEADERS+=constr_SET_OF.h
-ASN_MODULE_SOURCES+=constr_SET_OF.c
-ASN_MODULE_HEADERS+=asn_application.h
-ASN_MODULE_HEADERS+=asn_system.h
-ASN_MODULE_HEADERS+=asn_codecs.h
-ASN_MODULE_HEADERS+=asn_internal.h
-ASN_MODULE_HEADERS+=OCTET_STRING.h
-ASN_MODULE_SOURCES+=OCTET_STRING.c
-ASN_MODULE_HEADERS+=BIT_STRING.h
-ASN_MODULE_SOURCES+=BIT_STRING.c
-ASN_MODULE_SOURCES+=asn_codecs_prim.c
-ASN_MODULE_HEADERS+=asn_codecs_prim.h
-ASN_MODULE_HEADERS+=ber_tlv_length.h
-ASN_MODULE_SOURCES+=ber_tlv_length.c
-ASN_MODULE_HEADERS+=ber_tlv_tag.h
-ASN_MODULE_SOURCES+=ber_tlv_tag.c
-ASN_MODULE_HEADERS+=ber_decoder.h
-ASN_MODULE_SOURCES+=ber_decoder.c
-ASN_MODULE_HEADERS+=der_encoder.h
-ASN_MODULE_SOURCES+=der_encoder.c
-ASN_MODULE_HEADERS+=constr_TYPE.h
-ASN_MODULE_SOURCES+=constr_TYPE.c
-ASN_MODULE_HEADERS+=constraints.h
-ASN_MODULE_SOURCES+=constraints.c
-ASN_MODULE_HEADERS+=xer_support.h
-ASN_MODULE_SOURCES+=xer_support.c
-ASN_MODULE_HEADERS+=xer_decoder.h
-ASN_MODULE_SOURCES+=xer_decoder.c
-ASN_MODULE_HEADERS+=xer_encoder.h
-ASN_MODULE_SOURCES+=xer_encoder.c
-ASN_MODULE_HEADERS+=per_support.h
-ASN_MODULE_SOURCES+=per_support.c
-ASN_MODULE_HEADERS+=per_decoder.h
-ASN_MODULE_SOURCES+=per_decoder.c
-ASN_MODULE_HEADERS+=per_encoder.h
-ASN_MODULE_SOURCES+=per_encoder.c
-ASN_MODULE_HEADERS+=per_opentype.h
-ASN_MODULE_SOURCES+=per_opentype.c
-ASN_CONVERTER_SOURCES+=asntest.c
-
-
-lib_LTLIBRARIES=libsomething.la
-libsomething_la_SOURCES=$(ASN_MODULE_SOURCES) $(ASN_MODULE_HEADERS)
-
-# This file may be used as an input for make(3)
-# Remove the lines below to convert it into a pure .am file
-TARGET = progname
-CFLAGS += -I.
-OBJS=${ASN_MODULE_SOURCES:.c=.o} ${ASN_CONVERTER_SOURCES:.c=.o}
-
-all: $(TARGET)
-
-$(TARGET): ${OBJS}
- $(CC) $(CFLAGS) -o $(TARGET) ${OBJS} $(LDFLAGS) $(LIBS)
-
-.SUFFIXES:
-.SUFFIXES: .c .o
-
-.c.o:
- $(CC) $(CFLAGS) -o $@ -c $<
-
-clean:
- rm -f $(TARGET)
- rm -f $(OBJS)
-
-regen: regenerate-from-asn1-source
-
-regenerate-from-asn1-source:
- asn1c -fnative-types ../../../docs/pokerth.asn1
-
diff --git a/src/third_party/asn1/NativeEnumerated.c b/src/third_party/asn1/NativeEnumerated.c
deleted file mode 100644
index fc33a639..00000000
--- a/src/third_party/asn1/NativeEnumerated.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/*-
- * Copyright (c) 2004, 2007 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-/*
- * Read the NativeInteger.h for the explanation wrt. differences between
- * INTEGER and NativeInteger.
- * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this
- * implementation deals with the standard (machine-specific) representation
- * of them instead of using the platform-independent buffer.
- */
-#include
-#include
-
-/*
- * NativeEnumerated basic type description.
- */
-static ber_tlv_tag_t asn_DEF_NativeEnumerated_tags[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_NativeEnumerated = {
- "ENUMERATED", /* The ASN.1 type is still ENUMERATED */
- "ENUMERATED",
- NativeInteger_free,
- NativeInteger_print,
- asn_generic_no_constraint,
- NativeInteger_decode_ber,
- NativeInteger_encode_der,
- NativeInteger_decode_xer,
- NativeEnumerated_encode_xer,
- NativeEnumerated_decode_uper,
- NativeEnumerated_encode_uper,
- 0, /* Use generic outmost tag fetcher */
- asn_DEF_NativeEnumerated_tags,
- sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]),
- asn_DEF_NativeEnumerated_tags, /* Same as above */
- sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]),
- 0, /* No PER visible constraints */
- 0, 0, /* No members */
- 0 /* No specifics */
-};
-
-asn_enc_rval_t
-NativeEnumerated_encode_xer(asn_TYPE_descriptor_t *td, void *sptr,
- int ilevel, enum xer_encoder_flags_e flags,
- asn_app_consume_bytes_f *cb, void *app_key) {
- asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
- asn_enc_rval_t er;
- const long *native = (const long *)sptr;
- const asn_INTEGER_enum_map_t *el;
-
- (void)ilevel;
- (void)flags;
-
- if(!native) _ASN_ENCODE_FAILED;
-
- el = INTEGER_map_value2enum(specs, *native);
- if(el) {
- size_t srcsize = el->enum_len + 5;
- char *src = (char *)alloca(srcsize);
-
- er.encoded = snprintf(src, srcsize, "<%s/>", el->enum_name);
- assert(er.encoded > 0 && (size_t)er.encoded < srcsize);
- if(cb(src, er.encoded, app_key) < 0) _ASN_ENCODE_FAILED;
- _ASN_ENCODED_OK(er);
- } else {
- ASN_DEBUG("ASN.1 forbids dealing with "
- "unknown value of ENUMERATED type");
- _ASN_ENCODE_FAILED;
- }
-}
-
-asn_dec_rval_t
-NativeEnumerated_decode_uper(asn_codec_ctx_t *opt_codec_ctx,
- asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints,
- void **sptr, asn_per_data_t *pd) {
- asn_INTEGER_specifics_t *specs = (asn_INTEGER_specifics_t *)td->specifics;
- asn_dec_rval_t rval = { RC_OK, 0 };
- long *native = (long *)*sptr;
- asn_per_constraint_t *ct;
- long value;
-
- (void)opt_codec_ctx;
-
- if(constraints) ct = &constraints->value;
- else if(td->per_constraints) ct = &td->per_constraints->value;
- else _ASN_DECODE_FAILED; /* Mandatory! */
- if(!specs) _ASN_DECODE_FAILED;
-
- if(!native) {
- native = (long *)(*sptr = CALLOC(1, sizeof(*native)));
- if(!native) _ASN_DECODE_FAILED;
- }
-
- ASN_DEBUG("Decoding %s as NativeEnumerated", td->name);
-
- if(ct->flags & APC_EXTENSIBLE) {
- int inext = per_get_few_bits(pd, 1);
- if(inext < 0) _ASN_DECODE_STARVED;
- if(inext) ct = 0;
- }
-
- if(ct && ct->range_bits >= 0) {
- value = per_get_few_bits(pd, ct->range_bits);
- if(value < 0) _ASN_DECODE_STARVED;
- if(value >= (specs->extension
- ? specs->extension - 1 : specs->map_count))
- _ASN_DECODE_FAILED;
- } else {
- if(!specs->extension)
- _ASN_DECODE_FAILED;
- /*
- * X.691, #10.6: normally small non-negative whole number;
- */
- value = uper_get_nsnnwn(pd);
- if(value < 0) _ASN_DECODE_STARVED;
- value += specs->extension - 1;
- if(value >= specs->map_count)
- _ASN_DECODE_FAILED;
- }
-
- *native = specs->value2enum[value].nat_value;
- ASN_DEBUG("Decoded %s = %ld", td->name, *native);
-
- return rval;
-}
-
-static int
-NativeEnumerated__compar_value2enum(const void *ap, const void *bp) {
- const asn_INTEGER_enum_map_t *a = ap;
- const asn_INTEGER_enum_map_t *b = bp;
- if(a->nat_value == b->nat_value)
- return 0;
- if(a->nat_value < b->nat_value)
- return -1;
- return 1;
-}
-
-asn_enc_rval_t
-NativeEnumerated_encode_uper(asn_TYPE_descriptor_t *td,
- asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) {
- asn_INTEGER_specifics_t *specs = (asn_INTEGER_specifics_t *)td->specifics;
- asn_enc_rval_t er;
- long native, value;
- asn_per_constraint_t *ct;
- int inext = 0;
- asn_INTEGER_enum_map_t key;
- asn_INTEGER_enum_map_t *kf;
-
- if(!sptr) _ASN_ENCODE_FAILED;
- if(!specs) _ASN_ENCODE_FAILED;
-
- if(constraints) ct = &constraints->value;
- else if(td->per_constraints) ct = &td->per_constraints->value;
- else _ASN_ENCODE_FAILED; /* Mandatory! */
-
- ASN_DEBUG("Encoding %s as NativeEnumerated", td->name);
-
- er.encoded = 0;
-
- native = *(long *)sptr;
- if(native < 0) _ASN_ENCODE_FAILED;
-
- key.nat_value = native;
- kf = bsearch(&key, specs->value2enum, specs->map_count,
- sizeof(key), NativeEnumerated__compar_value2enum);
- if(!kf) {
- ASN_DEBUG("No element corresponds to %ld", native);
- _ASN_ENCODE_FAILED;
- }
- value = kf - specs->value2enum;
-
- if(ct->range_bits >= 0) {
- int cmpWith = specs->extension
- ? specs->extension - 1 : specs->map_count;
- if(value >= cmpWith)
- inext = 1;
- }
- if(ct->flags & APC_EXTENSIBLE) {
- if(per_put_few_bits(po, inext, 1))
- _ASN_ENCODE_FAILED;
- if(inext) ct = 0;
- } else if(inext) {
- _ASN_ENCODE_FAILED;
- }
-
- if(ct && ct->range_bits >= 0) {
- if(per_put_few_bits(po, value, ct->range_bits))
- _ASN_ENCODE_FAILED;
- _ASN_ENCODED_OK(er);
- }
-
- if(!specs->extension)
- _ASN_ENCODE_FAILED;
-
- /*
- * X.691, #10.6: normally small non-negative whole number;
- */
- ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld",
- value, specs->extension, inext,
- value - (inext ? (specs->extension - 1) : 0));
- if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0)))
- _ASN_ENCODE_FAILED;
-
- _ASN_ENCODED_OK(er);
-}
-
diff --git a/src/third_party/asn1/NativeEnumerated.h b/src/third_party/asn1/NativeEnumerated.h
deleted file mode 100644
index 404d31d0..00000000
--- a/src/third_party/asn1/NativeEnumerated.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*-
- * Copyright (c) 2004, 2005, 2006 Lev Walkin .
- * All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-/*
- * This type differs from the standard ENUMERATED in that it is modelled using
- * the fixed machine type (long, int, short), so it can hold only values of
- * limited length. There is no type (i.e., NativeEnumerated_t, any integer type
- * will do).
- * This type may be used when integer range is limited by subtype constraints.
- */
-#ifndef _NativeEnumerated_H_
-#define _NativeEnumerated_H_
-
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- extern asn_TYPE_descriptor_t asn_DEF_NativeEnumerated;
-
- xer_type_encoder_f NativeEnumerated_encode_xer;
- per_type_decoder_f NativeEnumerated_decode_uper;
- per_type_encoder_f NativeEnumerated_encode_uper;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NativeEnumerated_H_ */
diff --git a/src/third_party/asn1/NativeInteger.c b/src/third_party/asn1/NativeInteger.c
deleted file mode 100644
index 5b66332f..00000000
--- a/src/third_party/asn1/NativeInteger.c
+++ /dev/null
@@ -1,332 +0,0 @@
-/*-
- * Copyright (c) 2004, 2005, 2006 Lev Walkin .
- * All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-/*
- * Read the NativeInteger.h for the explanation wrt. differences between
- * INTEGER and NativeInteger.
- * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this
- * implementation deals with the standard (machine-specific) representation
- * of them instead of using the platform-independent buffer.
- */
-#include
-#include
-
-/*
- * NativeInteger basic type description.
- */
-static ber_tlv_tag_t asn_DEF_NativeInteger_tags[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
-};
-asn_TYPE_descriptor_t asn_DEF_NativeInteger = {
- "INTEGER", /* The ASN.1 type is still INTEGER */
- "INTEGER",
- NativeInteger_free,
- NativeInteger_print,
- asn_generic_no_constraint,
- NativeInteger_decode_ber,
- NativeInteger_encode_der,
- NativeInteger_decode_xer,
- NativeInteger_encode_xer,
- NativeInteger_decode_uper, /* Unaligned PER decoder */
- NativeInteger_encode_uper, /* Unaligned PER encoder */
- 0, /* Use generic outmost tag fetcher */
- asn_DEF_NativeInteger_tags,
- sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]),
- asn_DEF_NativeInteger_tags, /* Same as above */
- sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]),
- 0, /* No PER visible constraints */
- 0, 0, /* No members */
- 0 /* No specifics */
-};
-
-/*
- * Decode INTEGER type.
- */
-asn_dec_rval_t
-NativeInteger_decode_ber(asn_codec_ctx_t *opt_codec_ctx,
- asn_TYPE_descriptor_t *td,
- void **nint_ptr, const void *buf_ptr, size_t size, int tag_mode) {
- asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
- long *native = (long *)*nint_ptr;
- asn_dec_rval_t rval;
- ber_tlv_len_t length;
-
- /*
- * If the structure is not there, allocate it.
- */
- if(native == NULL) {
- native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native)));
- if(native == NULL) {
- rval.code = RC_FAIL;
- rval.consumed = 0;
- return rval;
- }
- }
-
- ASN_DEBUG("Decoding %s as INTEGER (tm=%d)",
- td->name, tag_mode);
-
- /*
- * Check tags.
- */
- rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size,
- tag_mode, 0, &length, 0);
- if(rval.code != RC_OK)
- return rval;
-
- ASN_DEBUG("%s length is %d bytes", td->name, (int)length);
-
- /*
- * Make sure we have this length.
- */
- buf_ptr = ((const char *)buf_ptr) + rval.consumed;
- size -= rval.consumed;
- if(length > (ber_tlv_len_t)size) {
- rval.code = RC_WMORE;
- rval.consumed = 0;
- return rval;
- }
-
- /*
- * ASN.1 encoded INTEGER: buf_ptr, length
- * Fill the native, at the same time checking for overflow.
- * If overflow occured, return with RC_FAIL.
- */
- {
- INTEGER_t tmp;
- union {
- const void *constbuf;
- void *nonconstbuf;
- } unconst_buf;
- long l;
-
- unconst_buf.constbuf = buf_ptr;
- tmp.buf = (uint8_t *)unconst_buf.nonconstbuf;
- tmp.size = length;
-
- if((specs&&specs->field_unsigned)
- ? asn_INTEGER2ulong(&tmp, (unsigned long *)&l) /* sic */
- : asn_INTEGER2long(&tmp, &l)) {
- rval.code = RC_FAIL;
- rval.consumed = 0;
- return rval;
- }
-
- *native = l;
- }
-
- rval.code = RC_OK;
- rval.consumed += length;
-
- ASN_DEBUG("Took %ld/%ld bytes to encode %s (%ld)",
- (long)rval.consumed, (long)length, td->name, (long)*native);
-
- return rval;
-}
-
-/*
- * Encode the NativeInteger using the standard INTEGER type DER encoder.
- */
-asn_enc_rval_t
-NativeInteger_encode_der(asn_TYPE_descriptor_t *sd, void *ptr,
- int tag_mode, ber_tlv_tag_t tag,
- asn_app_consume_bytes_f *cb, void *app_key) {
- unsigned long native = *(unsigned long *)ptr; /* Disable sign ext. */
- asn_enc_rval_t erval;
- INTEGER_t tmp;
-
-#ifdef WORDS_BIGENDIAN /* Opportunistic optimization */
-
- tmp.buf = (uint8_t *)&native;
- tmp.size = sizeof(native);
-
-#else /* Works even if WORDS_BIGENDIAN is not set where should've been */
- uint8_t buf[sizeof(native)];
- uint8_t *p;
-
- /* Prepare a fake INTEGER */
- for(p = buf + sizeof(buf) - 1; p >= buf; p--, native >>= 8)
- *p = (uint8_t)native;
-
- tmp.buf = buf;
- tmp.size = sizeof(buf);
-#endif /* WORDS_BIGENDIAN */
-
- /* Encode fake INTEGER */
- erval = INTEGER_encode_der(sd, &tmp, tag_mode, tag, cb, app_key);
- if(erval.encoded == -1) {
- assert(erval.structure_ptr == &tmp);
- erval.structure_ptr = ptr;
- }
- return erval;
-}
-
-/*
- * Decode the chunk of XML text encoding INTEGER.
- */
-asn_dec_rval_t
-NativeInteger_decode_xer(asn_codec_ctx_t *opt_codec_ctx,
- asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname,
- const void *buf_ptr, size_t size) {
- asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
- asn_dec_rval_t rval;
- INTEGER_t st;
- void *st_ptr = (void *)&st;
- long *native = (long *)*sptr;
-
- if(!native) {
- native = (long *)(*sptr = CALLOC(1, sizeof(*native)));
- if(!native) _ASN_DECODE_FAILED;
- }
-
- memset(&st, 0, sizeof(st));
- rval = INTEGER_decode_xer(opt_codec_ctx, td, &st_ptr,
- opt_mname, buf_ptr, size);
- if(rval.code == RC_OK) {
- long l;
- if((specs&&specs->field_unsigned)
- ? asn_INTEGER2ulong(&st, (unsigned long *)&l) /* sic */
- : asn_INTEGER2long(&st, &l)) {
- rval.code = RC_FAIL;
- rval.consumed = 0;
- } else {
- *native = l;
- }
- } else {
- /*
- * Cannot restart from the middle;
- * there is no place to save state in the native type.
- * Request a continuation from the very beginning.
- */
- rval.consumed = 0;
- }
- ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &st);
- return rval;
-}
-
-
-asn_enc_rval_t
-NativeInteger_encode_xer(asn_TYPE_descriptor_t *td, void *sptr,
- int ilevel, enum xer_encoder_flags_e flags,
- asn_app_consume_bytes_f *cb, void *app_key) {
- asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
- char scratch[32]; /* Enough for 64-bit int */
- asn_enc_rval_t er;
- const long *native = (const long *)sptr;
-
- (void)ilevel;
- (void)flags;
-
- if(!native) _ASN_ENCODE_FAILED;
-
- er.encoded = snprintf(scratch, sizeof(scratch),
- (specs && specs->field_unsigned)
- ? "%lu" : "%ld", *native);
- if(er.encoded <= 0 || (size_t)er.encoded >= sizeof(scratch)
- || cb(scratch, er.encoded, app_key) < 0)
- _ASN_ENCODE_FAILED;
-
- _ASN_ENCODED_OK(er);
-}
-
-asn_dec_rval_t
-NativeInteger_decode_uper(asn_codec_ctx_t *opt_codec_ctx,
- asn_TYPE_descriptor_t *td,
- asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
-
- asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
- asn_dec_rval_t rval;
- long *native = (long *)*sptr;
- INTEGER_t tmpint;
- void *tmpintptr = &tmpint;
-
- (void)opt_codec_ctx;
- ASN_DEBUG("Decoding NativeInteger %s (UPER)", td->name);
-
- if(!native) {
- native = (long *)(*sptr = CALLOC(1, sizeof(*native)));
- if(!native) _ASN_DECODE_FAILED;
- }
-
- memset(&tmpint, 0, sizeof tmpint);
- rval = INTEGER_decode_uper(opt_codec_ctx, td, constraints,
- &tmpintptr, pd);
- if(rval.code == RC_OK) {
- if((specs&&specs->field_unsigned)
- ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native)
- : asn_INTEGER2long(&tmpint, native))
- rval.code = RC_FAIL;
- else
- ASN_DEBUG("NativeInteger %s got value %ld",
- td->name, *native);
- }
- ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint);
-
- return rval;
-}
-
-asn_enc_rval_t
-NativeInteger_encode_uper(asn_TYPE_descriptor_t *td,
- asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) {
- asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
- asn_enc_rval_t er;
- long native;
- INTEGER_t tmpint;
-
- if(!sptr) _ASN_ENCODE_FAILED;
-
- native = *(long *)sptr;
-
- ASN_DEBUG("Encoding NativeInteger %s %ld (UPER)", td->name, native);
-
- memset(&tmpint, 0, sizeof(tmpint));
- if((specs&&specs->field_unsigned)
- ? asn_ulong2INTEGER(&tmpint, native)
- : asn_long2INTEGER(&tmpint, native))
- _ASN_ENCODE_FAILED;
- er = INTEGER_encode_uper(td, constraints, &tmpint, po);
- ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint);
- return er;
-}
-
-/*
- * INTEGER specific human-readable output.
- */
-int
-NativeInteger_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
- asn_app_consume_bytes_f *cb, void *app_key) {
- asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
- const long *native = (const long *)sptr;
- char scratch[32]; /* Enough for 64-bit int */
- int ret;
-
- (void)td; /* Unused argument */
- (void)ilevel; /* Unused argument */
-
- if(native) {
- ret = snprintf(scratch, sizeof(scratch),
- (specs && specs->field_unsigned)
- ? "%lu" : "%ld", *native);
- assert(ret > 0 && (size_t)ret < sizeof(scratch));
- return (cb(scratch, ret, app_key) < 0) ? -1 : 0;
- } else {
- return (cb("", 8, app_key) < 0) ? -1 : 0;
- }
-}
-
-void
-NativeInteger_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) {
-
- if(!td || !ptr)
- return;
-
- ASN_DEBUG("Freeing %s as INTEGER (%d, %p, Native)",
- td->name, contents_only, ptr);
-
- if(!contents_only) {
- FREEMEM(ptr);
- }
-}
-
diff --git a/src/third_party/asn1/NativeInteger.h b/src/third_party/asn1/NativeInteger.h
deleted file mode 100644
index a559b9b9..00000000
--- a/src/third_party/asn1/NativeInteger.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*-
- * Copyright (c) 2004 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-/*
- * This type differs from the standard INTEGER in that it is modelled using
- * the fixed machine type (long, int, short), so it can hold only values of
- * limited length. There is no type (i.e., NativeInteger_t, any integer type
- * will do).
- * This type may be used when integer range is limited by subtype constraints.
- */
-#ifndef _NativeInteger_H_
-#define _NativeInteger_H_
-
-#include
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- extern asn_TYPE_descriptor_t asn_DEF_NativeInteger;
-
- asn_struct_free_f NativeInteger_free;
- asn_struct_print_f NativeInteger_print;
- ber_type_decoder_f NativeInteger_decode_ber;
- der_type_encoder_f NativeInteger_encode_der;
- xer_type_decoder_f NativeInteger_decode_xer;
- xer_type_encoder_f NativeInteger_encode_xer;
- per_type_decoder_f NativeInteger_decode_uper;
- per_type_encoder_f NativeInteger_encode_uper;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NativeInteger_H_ */
diff --git a/src/third_party/asn1/OCTET_STRING.c b/src/third_party/asn1/OCTET_STRING.c
deleted file mode 100644
index aef5624b..00000000
--- a/src/third_party/asn1/OCTET_STRING.c
+++ /dev/null
@@ -1,1882 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004, 2005, 2006 Lev Walkin .
- * All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#include
-#include
-#include /* for .bits_unused member */
-#include
-
-/*
- * OCTET STRING basic type description.
- */
-static ber_tlv_tag_t asn_DEF_OCTET_STRING_tags[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
-};
-static asn_OCTET_STRING_specifics_t asn_DEF_OCTET_STRING_specs = {
- sizeof(OCTET_STRING_t),
- offsetof(OCTET_STRING_t, _asn_ctx),
- ASN_OSUBV_STR
-};
-static asn_per_constraints_t asn_DEF_OCTET_STRING_constraints = {
- { APC_CONSTRAINED, 8, 8, 0, 255 },
- { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 },
- 0, 0
-};
-asn_TYPE_descriptor_t asn_DEF_OCTET_STRING = {
- "OCTET STRING", /* Canonical name */
- "OCTET_STRING", /* XML tag name */
- OCTET_STRING_free,
- OCTET_STRING_print, /* non-ascii stuff, generally */
- asn_generic_no_constraint,
- OCTET_STRING_decode_ber,
- OCTET_STRING_encode_der,
- OCTET_STRING_decode_xer_hex,
- OCTET_STRING_encode_xer,
- OCTET_STRING_decode_uper, /* Unaligned PER decoder */
- OCTET_STRING_encode_uper, /* Unaligned PER encoder */
- 0, /* Use generic outmost tag fetcher */
- asn_DEF_OCTET_STRING_tags,
- sizeof(asn_DEF_OCTET_STRING_tags)
- / sizeof(asn_DEF_OCTET_STRING_tags[0]),
- asn_DEF_OCTET_STRING_tags, /* Same as above */
- sizeof(asn_DEF_OCTET_STRING_tags)
- / sizeof(asn_DEF_OCTET_STRING_tags[0]),
- 0, /* No PER visible constraints */
- 0, 0, /* No members */
- &asn_DEF_OCTET_STRING_specs
-};
-
-#undef _CH_PHASE
-#undef NEXT_PHASE
-#undef PREV_PHASE
-#define _CH_PHASE(ctx, inc) do { \
- if(ctx->phase == 0) \
- ctx->context = 0; \
- ctx->phase += inc; \
- } while(0)
-#define NEXT_PHASE(ctx) _CH_PHASE(ctx, +1)
-#define PREV_PHASE(ctx) _CH_PHASE(ctx, -1)
-
-#undef ADVANCE
-#define ADVANCE(num_bytes) do { \
- size_t num = (num_bytes); \
- buf_ptr = ((const char *)buf_ptr) + num; \
- size -= num; \
- consumed_myself += num; \
- } while(0)
-
-#undef RETURN
-#define RETURN(_code) do { \
- asn_dec_rval_t tmprval; \
- tmprval.code = _code; \
- tmprval.consumed = consumed_myself; \
- return tmprval; \
- } while(0)
-
-#undef APPEND
-#define APPEND(bufptr, bufsize) do { \
- size_t _bs = (bufsize); /* Append size */ \
- size_t _ns = ctx->context; /* Allocated now */ \
- size_t _es = st->size + _bs; /* Expected size */ \
- /* int is really a typeof(st->size): */ \
- if((int)_es < 0) RETURN(RC_FAIL); \
- if(_ns <= _es) { \
- void *ptr; \
- /* Be nice and round to the memory allocator */ \
- do { _ns = _ns ? _ns << 1 : 16; } \
- while(_ns <= _es); \
- /* int is really a typeof(st->size): */ \
- if((int)_ns < 0) RETURN(RC_FAIL); \
- ptr = REALLOC(st->buf, _ns); \
- if(ptr) { \
- st->buf = (uint8_t *)ptr; \
- ctx->context = _ns; \
- } else { \
- RETURN(RC_FAIL); \
- } \
- ASN_DEBUG("Reallocating into %ld", (long)_ns); \
- } \
- memcpy(st->buf + st->size, bufptr, _bs); \
- /* Convenient nul-termination */ \
- st->buf[_es] = '\0'; \
- st->size = _es; \
- } while(0)
-
-/*
- * The main reason why ASN.1 is still alive is that too much time and effort
- * is necessary for learning it more or less adequately, thus creating a gut
- * necessity to demonstrate that aquired skill everywhere afterwards.
- * No, I am not going to explain what the following stuff is.
- */
-struct _stack_el {
- ber_tlv_len_t left; /* What's left to read (or -1) */
- ber_tlv_len_t got; /* What was actually processed */
- int cont_level; /* Depth of subcontainment */
- int want_nulls; /* Want null "end of content" octets? */
- int bits_chopped; /* Flag in BIT STRING mode */
- ber_tlv_tag_t tag; /* For debugging purposes */
- struct _stack_el *prev;
- struct _stack_el *next;
-};
-struct _stack {
- struct _stack_el *tail;
- struct _stack_el *cur_ptr;
-};
-
-static struct _stack_el *
-OS__add_stack_el(struct _stack *st) {
- struct _stack_el *nel;
-
- /*
- * Reuse the old stack frame or allocate a new one.
- */
- if(st->cur_ptr && st->cur_ptr->next) {
- nel = st->cur_ptr->next;
- nel->bits_chopped = 0;
- nel->got = 0;
- /* Retain the nel->cont_level, it's correct. */
- } else {
- nel = (struct _stack_el *)CALLOC(1, sizeof(struct _stack_el));
- if(nel == NULL)
- return NULL;
-
- if(st->tail) {
- /* Increase a subcontainment depth */
- nel->cont_level = st->tail->cont_level + 1;
- st->tail->next = nel;
- }
- nel->prev = st->tail;
- st->tail = nel;
- }
-
- st->cur_ptr = nel;
-
- return nel;
-}
-
-static struct _stack *
-_new_stack() {
- return (struct _stack *)CALLOC(1, sizeof(struct _stack));
-}
-
-/*
- * Decode OCTET STRING type.
- */
-asn_dec_rval_t
-OCTET_STRING_decode_ber(asn_codec_ctx_t *opt_codec_ctx,
- asn_TYPE_descriptor_t *td,
- void **sptr, const void *buf_ptr, size_t size, int tag_mode) {
- asn_OCTET_STRING_specifics_t *specs = td->specifics
- ? (asn_OCTET_STRING_specifics_t *)td->specifics
- : &asn_DEF_OCTET_STRING_specs;
- BIT_STRING_t *st = (BIT_STRING_t *)*sptr;
- asn_dec_rval_t rval;
- asn_struct_ctx_t *ctx;
- ssize_t consumed_myself = 0;
- struct _stack *stck; /* Expectations stack structure */
- struct _stack_el *sel = 0; /* Stack element */
- int tlv_constr;
- enum asn_OS_Subvariant type_variant = specs->subvariant;
-
- ASN_DEBUG("Decoding %s as %s (frame %ld)",
- td->name,
- (type_variant == ASN_OSUBV_STR) ?
- "OCTET STRING" : "OS-SpecialCase",
- (long)size);
-
- /*
- * Create the string if does not exist.
- */
- if(st == NULL) {
- st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size));
- if(st == NULL) RETURN(RC_FAIL);
- }
-
- /* Restore parsing context */
- ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
-
- switch(ctx->phase) {
- case 0:
- /*
- * Check tags.
- */
- rval = ber_check_tags(opt_codec_ctx, td, ctx,
- buf_ptr, size, tag_mode, -1,
- &ctx->left, &tlv_constr);
- if(rval.code != RC_OK)
- return rval;
-
- if(tlv_constr) {
- /*
- * Complex operation, requires stack of expectations.
- */
- ctx->ptr = _new_stack();
- if(ctx->ptr) {
- stck = (struct _stack *)ctx->ptr;
- } else {
- RETURN(RC_FAIL);
- }
- } else {
- /*
- * Jump into stackless primitive decoding.
- */
- _CH_PHASE(ctx, 3);
- if(type_variant == ASN_OSUBV_ANY && tag_mode != 1)
- APPEND(buf_ptr, rval.consumed);
- ADVANCE(rval.consumed);
- goto phase3;
- }
-
- NEXT_PHASE(ctx);
- /* Fall through */
- case 1:
-phase1:
- /*
- * Fill the stack with expectations.
- */
- stck = (struct _stack *)ctx->ptr;
- sel = stck->cur_ptr;
- do {
- ber_tlv_tag_t tlv_tag;
- ber_tlv_len_t tlv_len;
- ber_tlv_tag_t expected_tag;
- ssize_t tl, ll, tlvl;
- /* This one works even if (sel->left == -1) */
- ssize_t Left = ((!sel||(size_t)sel->left >= size)
- ?(ssize_t)size:sel->left);
-
-
- ASN_DEBUG("%p, s->l=%ld, s->wn=%ld, s->g=%ld\n", sel,
- (long)(sel?sel->left:0),
- (long)(sel?sel->want_nulls:0),
- (long)(sel?sel->got:0)
- );
- if(sel && sel->left <= 0 && sel->want_nulls == 0) {
- if(sel->prev) {
- struct _stack_el *prev = sel->prev;
- if(prev->left != -1) {
- if(prev->left < sel->got)
- RETURN(RC_FAIL);
- prev->left -= sel->got;
- }
- prev->got += sel->got;
- sel = stck->cur_ptr = prev;
- if(!sel) break;
- tlv_constr = 1;
- continue;
- } else {
- sel = stck->cur_ptr = 0;
- break; /* Nothing to wait */
- }
- }
-
- tl = ber_fetch_tag(buf_ptr, Left, &tlv_tag);
- ASN_DEBUG("fetch tag(size=%ld,L=%ld), %sstack, left=%ld, wn=%ld, tl=%ld",
- (long)size, (long)Left, sel?"":"!",
- (long)(sel?sel->left:0),
- (long)(sel?sel->want_nulls:0),
- (long)tl);
- switch(tl) {
- case -1:
- RETURN(RC_FAIL);
- case 0:
- RETURN(RC_WMORE);
- }
-
- tlv_constr = BER_TLV_CONSTRUCTED(buf_ptr);
-
- ll = ber_fetch_length(tlv_constr,
- (const char *)buf_ptr + tl,Left - tl,&tlv_len);
- ASN_DEBUG("Got tag=%s, tc=%d, left=%ld, tl=%ld, len=%ld, ll=%ld",
- ber_tlv_tag_string(tlv_tag), tlv_constr,
- (long)Left, (long)tl, (long)tlv_len, (long)ll);
- switch(ll) {
- case -1:
- RETURN(RC_FAIL);
- case 0:
- RETURN(RC_WMORE);
- }
-
- if(sel && sel->want_nulls
- && ((const uint8_t *)buf_ptr)[0] == 0
- && ((const uint8_t *)buf_ptr)[1] == 0)
- {
-
- ASN_DEBUG("Eat EOC; wn=%d--", sel->want_nulls);
-
- if(type_variant == ASN_OSUBV_ANY
- && (tag_mode != 1 || sel->cont_level))
- APPEND("\0\0", 2);
-
- ADVANCE(2);
- sel->got += 2;
- if(sel->left != -1) {
- sel->left -= 2; /* assert(sel->left >= 2) */
- }
-
- sel->want_nulls--;
- if(sel->want_nulls == 0) {
- /* Move to the next expectation */
- sel->left = 0;
- tlv_constr = 1;
- }
-
- continue;
- }
-
- /*
- * Set up expected tags,
- * depending on ASN.1 type being decoded.
- */
- switch(type_variant) {
- case ASN_OSUBV_BIT:
- /* X.690: 8.6.4.1, NOTE 2 */
- /* Fall through */
- case ASN_OSUBV_STR:
- default:
- if(sel) {
- int level = sel->cont_level;
- if(level < td->all_tags_count) {
- expected_tag = td->all_tags[level];
- break;
- } else if(td->all_tags_count) {
- expected_tag = td->all_tags
- [td->all_tags_count - 1];
- break;
- }
- /* else, Fall through */
- }
- /* Fall through */
- case ASN_OSUBV_ANY:
- expected_tag = tlv_tag;
- break;
- }
-
-
- if(tlv_tag != expected_tag) {
- char buf[2][32];
- ber_tlv_tag_snprint(tlv_tag,
- buf[0], sizeof(buf[0]));
- ber_tlv_tag_snprint(td->tags[td->tags_count-1],
- buf[1], sizeof(buf[1]));
- ASN_DEBUG("Tag does not match expectation: %s != %s",
- buf[0], buf[1]);
- RETURN(RC_FAIL);
- }
-
- tlvl = tl + ll; /* Combined length of T and L encoding */
- if((tlv_len + tlvl) < 0) {
- /* tlv_len value is too big */
- ASN_DEBUG("TLV encoding + length (%ld) is too big",
- (long)tlv_len);
- RETURN(RC_FAIL);
- }
-
- /*
- * Append a new expectation.
- */
- sel = OS__add_stack_el(stck);
- if(!sel) RETURN(RC_FAIL);
-
- sel->tag = tlv_tag;
-
- sel->want_nulls = (tlv_len==-1);
- if(sel->prev && sel->prev->left != -1) {
- /* Check that the parent frame is big enough */
- if(sel->prev->left < tlvl + (tlv_len==-1?0:tlv_len))
- RETURN(RC_FAIL);
- if(tlv_len == -1)
- sel->left = sel->prev->left - tlvl;
- else
- sel->left = tlv_len;
- } else {
- sel->left = tlv_len;
- }
- if(type_variant == ASN_OSUBV_ANY
- && (tag_mode != 1 || sel->cont_level))
- APPEND(buf_ptr, tlvl);
- sel->got += tlvl;
- ADVANCE(tlvl);
-
- ASN_DEBUG("+EXPECT2 got=%ld left=%ld, wn=%d, clvl=%d",
- (long)sel->got, (long)sel->left,
- sel->want_nulls, sel->cont_level);
-
- } while(tlv_constr);
- if(sel == NULL) {
- /* Finished operation, "phase out" */
- ASN_DEBUG("Phase out");
- _CH_PHASE(ctx, +3);
- break;
- }
-
- NEXT_PHASE(ctx);
- /* Fall through */
- case 2:
- stck = (struct _stack *)ctx->ptr;
- sel = stck->cur_ptr;
- ASN_DEBUG("Phase 2: Need %ld bytes, size=%ld, alrg=%ld, wn=%d",
- (long)sel->left, (long)size, (long)sel->got,
- sel->want_nulls);
- {
- ber_tlv_len_t len;
-
- assert(sel->left >= 0);
-
- len = ((ber_tlv_len_t)size < sel->left)
- ? (ber_tlv_len_t)size : sel->left;
- if(len > 0) {
- if(type_variant == ASN_OSUBV_BIT
- && sel->bits_chopped == 0) {
- /* Put the unused-bits-octet away */
- st->bits_unused = *(const uint8_t *)buf_ptr;
- APPEND(((const char *)buf_ptr+1), (len - 1));
- sel->bits_chopped = 1;
- } else {
- APPEND(buf_ptr, len);
- }
- ADVANCE(len);
- sel->left -= len;
- sel->got += len;
- }
-
- if(sel->left) {
- ASN_DEBUG("OS left %ld, size = %ld, wn=%d\n",
- (long)sel->left, (long)size, sel->want_nulls);
- RETURN(RC_WMORE);
- }
-
- PREV_PHASE(ctx);
- goto phase1;
- }
- break;
- case 3:
-phase3:
- /*
- * Primitive form, no stack required.
- */
- assert(ctx->left >= 0);
-
- if(size < (size_t)ctx->left) {
- if(!size) RETURN(RC_WMORE);
- if(type_variant == ASN_OSUBV_BIT && !ctx->context) {
- st->bits_unused = *(const uint8_t *)buf_ptr;
- ctx->left--;
- ADVANCE(1);
- }
- APPEND(buf_ptr, size);
- assert(ctx->context > 0);
- ctx->left -= size;
- ADVANCE(size);
- RETURN(RC_WMORE);
- } else {
- if(type_variant == ASN_OSUBV_BIT
- && !ctx->context && ctx->left) {
- st->bits_unused = *(const uint8_t *)buf_ptr;
- ctx->left--;
- ADVANCE(1);
- }
- APPEND(buf_ptr, ctx->left);
- ADVANCE(ctx->left);
- ctx->left = 0;
-
- NEXT_PHASE(ctx);
- }
- break;
- }
-
- if(sel) {
- ASN_DEBUG("3sel p=%p, wn=%d, l=%ld, g=%ld, size=%ld",
- sel->prev, sel->want_nulls,
- (long)sel->left, (long)sel->got, (long)size);
- if(sel->prev || sel->want_nulls > 1 || sel->left > 0) {
- RETURN(RC_WMORE);
- }
- }
-
- /*
- * BIT STRING-specific processing.
- */
- if(type_variant == ASN_OSUBV_BIT && st->size) {
- /* Finalize BIT STRING: zero out unused bits. */
- st->buf[st->size-1] &= 0xff << st->bits_unused;
- }
-
- ASN_DEBUG("Took %ld bytes to encode %s: [%s]:%ld",
- (long)consumed_myself, td->name,
- (type_variant == ASN_OSUBV_STR) ? (char *)st->buf : "",
- (long)st->size);
-
-
- RETURN(RC_OK);
-}
-
-/*
- * Encode OCTET STRING type using DER.
- */
-asn_enc_rval_t
-OCTET_STRING_encode_der(asn_TYPE_descriptor_t *td, void *sptr,
- int tag_mode, ber_tlv_tag_t tag,
- asn_app_consume_bytes_f *cb, void *app_key) {
- asn_enc_rval_t er;
- asn_OCTET_STRING_specifics_t *specs = td->specifics
- ? (asn_OCTET_STRING_specifics_t *)td->specifics
- : &asn_DEF_OCTET_STRING_specs;
- BIT_STRING_t *st = (BIT_STRING_t *)sptr;
- enum asn_OS_Subvariant type_variant = specs->subvariant;
- int fix_last_byte = 0;
-
- ASN_DEBUG("%s %s as OCTET STRING",
- cb?"Estimating":"Encoding", td->name);
-
- /*
- * Write tags.
- */
- if(type_variant != ASN_OSUBV_ANY || tag_mode == 1) {
- er.encoded = der_write_tags(td,
- (type_variant == ASN_OSUBV_BIT) + st->size,
- tag_mode, type_variant == ASN_OSUBV_ANY, tag,
- cb, app_key);
- if(er.encoded == -1) {
- er.failed_type = td;
- er.structure_ptr = sptr;
- return er;
- }
- } else {
- /* Disallow: [] IMPLICIT ANY */
- assert(type_variant != ASN_OSUBV_ANY || tag_mode != -1);
- er.encoded = 0;
- }
-
- if(!cb) {
- er.encoded += (type_variant == ASN_OSUBV_BIT) + st->size;
- _ASN_ENCODED_OK(er);
- }
-
- /*
- * Prepare to deal with the last octet of BIT STRING.
- */
- if(type_variant == ASN_OSUBV_BIT) {
- uint8_t b = st->bits_unused & 0x07;
- if(b && st->size) fix_last_byte = 1;
- _ASN_CALLBACK(&b, 1);
- er.encoded++;
- }
-
- /* Invoke callback for the main part of the buffer */
- _ASN_CALLBACK(st->buf, st->size - fix_last_byte);
-
- /* The last octet should be stripped off the unused bits */
- if(fix_last_byte) {
- uint8_t b = st->buf[st->size-1] & (0xff << st->bits_unused);
- _ASN_CALLBACK(&b, 1);
- }
-
- er.encoded += st->size;
- _ASN_ENCODED_OK(er);
-cb_failed:
- _ASN_ENCODE_FAILED;
-}
-
-asn_enc_rval_t
-OCTET_STRING_encode_xer(asn_TYPE_descriptor_t *td, void *sptr,
- int ilevel, enum xer_encoder_flags_e flags,
- asn_app_consume_bytes_f *cb, void *app_key) {
- static const char *h2c = "0123456789ABCDEF";
- const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
- asn_enc_rval_t er;
- char scratch[16 * 3 + 4];
- char *p = scratch;
- uint8_t *buf;
- uint8_t *end;
- size_t i;
-
- if(!st || (!st->buf && st->size))
- _ASN_ENCODE_FAILED;
-
- er.encoded = 0;
-
- /*
- * Dump the contents of the buffer in hexadecimal.
- */
- buf = st->buf;
- end = buf + st->size;
- if(flags & XER_F_CANONICAL) {
- char *scend = scratch + (sizeof(scratch) - 2);
- for(; buf < end; buf++) {
- if(p >= scend) {
- _ASN_CALLBACK(scratch, p - scratch);
- er.encoded += p - scratch;
- p = scratch;
- }
- *p++ = h2c[(*buf >> 4) & 0x0F];
- *p++ = h2c[*buf & 0x0F];
- }
-
- _ASN_CALLBACK(scratch, p-scratch); /* Dump the rest */
- er.encoded += p - scratch;
- } else {
- for(i = 0; buf < end; buf++, i++) {
- if(!(i % 16) && (i || st->size > 16)) {
- _ASN_CALLBACK(scratch, p-scratch);
- er.encoded += (p-scratch);
- p = scratch;
- _i_ASN_TEXT_INDENT(1, ilevel);
- }
- *p++ = h2c[(*buf >> 4) & 0x0F];
- *p++ = h2c[*buf & 0x0F];
- *p++ = 0x20;
- }
- if(p - scratch) {
- p--; /* Remove the tail space */
- _ASN_CALLBACK(scratch, p-scratch); /* Dump the rest */
- er.encoded += p - scratch;
- if(st->size > 16)
- _i_ASN_TEXT_INDENT(1, ilevel-1);
- }
- }
-
- _ASN_ENCODED_OK(er);
-cb_failed:
- _ASN_ENCODE_FAILED;
-}
-
-static struct OCTET_STRING__xer_escape_table_s {
- char *string;
- int size;
-} OCTET_STRING__xer_escape_table[] = {
-#define OSXET(s) { s, sizeof(s) - 1 }
- OSXET("\074\156\165\154\057\076"), /* */
- OSXET("\074\163\157\150\057\076"), /* */
- OSXET("\074\163\164\170\057\076"), /* */
- OSXET("\074\145\164\170\057\076"), /* */
- OSXET("\074\145\157\164\057\076"), /* */
- OSXET("\074\145\156\161\057\076"), /* */
- OSXET("\074\141\143\153\057\076"), /* */
- OSXET("\074\142\145\154\057\076"), /* */
- OSXET("\074\142\163\057\076"), /* */
- OSXET("\011"), /* \t */
- OSXET("\012"), /* \n */
- OSXET("\074\166\164\057\076"), /* */
- OSXET("\074\146\146\057\076"), /* */
- OSXET("\015"), /* \r */
- OSXET("\074\163\157\057\076"), /* */
- OSXET("\074\163\151\057\076"), /* */
- OSXET("\074\144\154\145\057\076"), /* */
- OSXET("\074\144\143\061\057\076"), /* */
- OSXET("\074\144\143\062\057\076"), /* */
- OSXET("\074\144\143\063\057\076"), /* */
- OSXET("\074\144\143\064\057\076"), /* */
- OSXET("\074\156\141\153\057\076"), /* */
- OSXET("\074\163\171\156\057\076"), /* */
- OSXET("\074\145\164\142\057\076"), /* */
- OSXET("\074\143\141\156\057\076"), /* */
- OSXET("\074\145\155\057\076"), /* */
- OSXET("\074\163\165\142\057\076"), /* */
- OSXET("\074\145\163\143\057\076"), /* */
- OSXET("\074\151\163\064\057\076"), /* */
- OSXET("\074\151\163\063\057\076"), /* */
- OSXET("\074\151\163\062\057\076"), /* */
- OSXET("\074\151\163\061\057\076"), /* */
- { 0, 0 }, /* " " */
- { 0, 0 }, /* ! */
- { 0, 0 }, /* \" */
- { 0, 0 }, /* # */
- { 0, 0 }, /* $ */
- { 0, 0 }, /* % */
- OSXET("\046\141\155\160\073"), /* & */
- { 0, 0 }, /* ' */
- {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* ()*+,-./ */
- {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* 01234567 */
- {0,0},{0,0},{0,0},{0,0}, /* 89:; */
- OSXET("\046\154\164\073"), /* < */
- { 0, 0 }, /* = */
- OSXET("\046\147\164\073"), /* > */
-};
-
-static int
-OS__check_escaped_control_char(const void *buf, int size) {
- size_t i;
- /*
- * Inefficient algorithm which translates the escape sequences
- * defined above into characters. Returns -1 if not found.
- * TODO: replace by a faster algorithm (bsearch(), hash or
- * nested table lookups).
- */
- for(i = 0; i < 32 /* Don't spend time on the bottom half */; i++) {
- struct OCTET_STRING__xer_escape_table_s *el;
- el = &OCTET_STRING__xer_escape_table[i];
- if(el->size == size && memcmp(buf, el->string, size) == 0)
- return i;
- }
- return -1;
-}
-
-static int
-OCTET_STRING__handle_control_chars(void *struct_ptr, const void *chunk_buf, size_t chunk_size) {
- /*
- * This might be one of the escape sequences
- * for control characters. Check it out.
- * #11.15.5
- */
- int control_char = OS__check_escaped_control_char(chunk_buf,chunk_size);
- if(control_char >= 0) {
- OCTET_STRING_t *st = (OCTET_STRING_t *)struct_ptr;
- void *p = REALLOC(st->buf, st->size + 2);
- if(p) {
- st->buf = (uint8_t *)p;
- st->buf[st->size++] = control_char;
- st->buf[st->size] = '\0'; /* nul-termination */
- return 0;
- }
- }
-
- return -1; /* No, it's not */
-}
-
-asn_enc_rval_t
-OCTET_STRING_encode_xer_utf8(asn_TYPE_descriptor_t *td, void *sptr,
- int ilevel, enum xer_encoder_flags_e flags,
- asn_app_consume_bytes_f *cb, void *app_key) {
- const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
- asn_enc_rval_t er;
- uint8_t *buf, *end;
- uint8_t *ss; /* Sequence start */
- ssize_t encoded_len = 0;
-
- (void)ilevel; /* Unused argument */
- (void)flags; /* Unused argument */
-
- if(!st || (!st->buf && st->size))
- _ASN_ENCODE_FAILED;
-
- buf = st->buf;
- end = buf + st->size;
- for(ss = buf; buf < end; buf++) {
- unsigned int ch = *buf;
- int s_len; /* Special encoding sequence length */
-
- /*
- * Escape certain characters: X.680/11.15
- */
- if(ch < sizeof(OCTET_STRING__xer_escape_table)
- /sizeof(OCTET_STRING__xer_escape_table[0])
- && (s_len = OCTET_STRING__xer_escape_table[ch].size)) {
- if(((buf - ss) && cb(ss, buf - ss, app_key) < 0)
- || cb(OCTET_STRING__xer_escape_table[ch].string, s_len,
- app_key) < 0)
- _ASN_ENCODE_FAILED;
- encoded_len += (buf - ss) + s_len;
- ss = buf + 1;
- }
- }
-
- encoded_len += (buf - ss);
- if((buf - ss) && cb(ss, buf - ss, app_key) < 0)
- _ASN_ENCODE_FAILED;
-
- er.encoded = encoded_len;
- _ASN_ENCODED_OK(er);
-}
-
-/*
- * Convert from hexadecimal format (cstring): "AB CD EF"
- */
-static ssize_t OCTET_STRING__convert_hexadecimal(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) {
- OCTET_STRING_t *st = (OCTET_STRING_t *)sptr;
- const char *chunk_stop = (const char *)chunk_buf;
- const char *p = chunk_stop;
- const char *pend = p + chunk_size;
- unsigned int clv = 0;
- int half = 0; /* Half bit */
- uint8_t *buf;
-
- /* Reallocate buffer according to high cap estimation */
- ssize_t _ns = st->size + (chunk_size + 1) / 2;
- void *nptr = REALLOC(st->buf, _ns + 1);
- if(!nptr) return -1;
- st->buf = (uint8_t *)nptr;
- buf = st->buf + st->size;
-
- /*
- * If something like " a b c " appears here, the " a b":3 will be
- * converted, and the rest skipped. That is, unless buf_size is greater
- * than chunk_size, then it'll be equivalent to "ABC0".
- */
- for(; p < pend; p++) {
- int ch = *(const unsigned char *)p;
- switch(ch) {
- case 0x09:
- case 0x0a:
- case 0x0c:
- case 0x0d:
- case 0x20:
- /* Ignore whitespace */
- continue;
- case 0x30:
- case 0x31:
- case 0x32:
- case 0x33:
- case 0x34: /*01234*/
- case 0x35:
- case 0x36:
- case 0x37:
- case 0x38:
- case 0x39: /*56789*/
- clv = (clv << 4) + (ch - 0x30);
- break;
- case 0x41:
- case 0x42:
- case 0x43: /* ABC */
- case 0x44:
- case 0x45:
- case 0x46: /* DEF */
- clv = (clv << 4) + (ch - 0x41 + 10);
- break;
- case 0x61:
- case 0x62:
- case 0x63: /* abc */
- case 0x64:
- case 0x65:
- case 0x66: /* def */
- clv = (clv << 4) + (ch - 0x61 + 10);
- break;
- default:
- *buf = 0; /* JIC */
- return -1;
- }
- if(half++) {
- half = 0;
- *buf++ = clv;
- chunk_stop = p + 1;
- }
- }
-
- /*
- * Check partial decoding.
- */
- if(half) {
- if(have_more) {
- /*
- * Partial specification is fine,
- * because no more more PXER_TEXT data is available.
- */
- *buf++ = clv << 4;
- chunk_stop = p;
- }
- } else {
- chunk_stop = p;
- }
-
- st->size = buf - st->buf; /* Adjust the buffer size */
- assert(st->size <= _ns);
- st->buf[st->size] = 0; /* Courtesy termination */
-
- return (chunk_stop - (const char *)chunk_buf); /* Converted size */
-}
-
-/*
- * Convert from binary format: "00101011101"
- */
-static ssize_t OCTET_STRING__convert_binary(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) {
- BIT_STRING_t *st = (BIT_STRING_t *)sptr;
- const char *p = (const char *)chunk_buf;
- const char *pend = p + chunk_size;
- int bits_unused = st->bits_unused & 0x7;
- uint8_t *buf;
-
- /* Reallocate buffer according to high cap estimation */
- ssize_t _ns = st->size + (chunk_size + 7) / 8;
- void *nptr = REALLOC(st->buf, _ns + 1);
- if(!nptr) return -1;
- st->buf = (uint8_t *)nptr;
- buf = st->buf + st->size;
-
- (void)have_more;
-
- if(bits_unused == 0)
- bits_unused = 8;
- else if(st->size)
- buf--;
-
- /*
- * Convert series of 0 and 1 into the octet string.
- */
- for(; p < pend; p++) {
- int ch = *(const unsigned char *)p;
- switch(ch) {
- case 0x09:
- case 0x0a:
- case 0x0c:
- case 0x0d:
- case 0x20:
- /* Ignore whitespace */
- break;
- case 0x30:
- case 0x31:
- if(bits_unused-- <= 0) {
- *++buf = 0; /* Clean the cell */
- bits_unused = 7;
- }
- *buf |= (ch&1) << bits_unused;
- break;
- default:
- st->bits_unused = bits_unused;
- return -1;
- }
- }
-
- if(bits_unused == 8) {
- st->size = buf - st->buf;
- st->bits_unused = 0;
- } else {
- st->size = buf - st->buf + 1;
- st->bits_unused = bits_unused;
- }
-
- assert(st->size <= _ns);
- st->buf[st->size] = 0; /* Courtesy termination */
-
- return chunk_size; /* Converted in full */
-}
-
-/*
- * Something like strtod(), but with stricter rules.
- */
-static int
-OS__strtoent(int base, const char *buf, const char *end, int32_t *ret_value) {
- int32_t val = 0;
- const char *p;
-
- for(p = buf; p < end; p++) {
- int ch = *p;
-
- /* Strange huge value */
- if((val * base + base) < 0)
- return -1;
-
- switch(ch) {
- case 0x30:
- case 0x31:
- case 0x32:
- case 0x33:
- case 0x34: /*01234*/
- case 0x35:
- case 0x36:
- case 0x37:
- case 0x38:
- case 0x39: /*56789*/
- val = val * base + (ch - 0x30);
- break;
- case 0x41:
- case 0x42:
- case 0x43: /* ABC */
- case 0x44:
- case 0x45:
- case 0x46: /* DEF */
- val = val * base + (ch - 0x41 + 10);
- break;
- case 0x61:
- case 0x62:
- case 0x63: /* abc */
- case 0x64:
- case 0x65:
- case 0x66: /* def */
- val = val * base + (ch - 0x61 + 10);
- break;
- case 0x3b: /* ';' */
- *ret_value = val;
- return (p - buf) + 1;
- default:
- return -1; /* Character set error */
- }
- }
-
- *ret_value = -1;
- return (p - buf);
-}
-
-/*
- * Convert from the plain UTF-8 format, expanding entity references: "2 < 3"
- */
-static ssize_t OCTET_STRING__convert_entrefs(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) {
- OCTET_STRING_t *st = (OCTET_STRING_t *)sptr;
- const char *p = (const char *)chunk_buf;
- const char *pend = p + chunk_size;
- uint8_t *buf;
-
- /* Reallocate buffer */
- ssize_t _ns = st->size + chunk_size;
- void *nptr = REALLOC(st->buf, _ns + 1);
- if(!nptr) return -1;
- st->buf = (uint8_t *)nptr;
- buf = st->buf + st->size;
-
- /*
- * Convert series of 0 and 1 into the octet string.
- */
- for(; p < pend; p++) {
- int ch = *(const unsigned char *)p;
- int len; /* Length of the rest of the chunk */
-
- if(ch != 0x26 /* '&' */) {
- *buf++ = ch;
- continue; /* That was easy... */
- }
-
- /*
- * Process entity reference.
- */
- len = chunk_size - (p - (const char *)chunk_buf);
- if(len == 1 /* "&" */) goto want_more;
- if(p[1] == 0x23 /* '#' */) {
- const char *pval; /* Pointer to start of digits */
- int32_t val = 0; /* Entity reference value */
- int base;
-
- if(len == 2 /* "" */) goto want_more;
- if(p[2] == 0x78 /* 'x' */)
- pval = p + 3, base = 16;
- else
- pval = p + 2, base = 10;
- len = OS__strtoent(base, pval, p + len, &val);
- if(len == -1) {
- /* Invalid charset. Just copy verbatim. */
- *buf++ = ch;
- continue;
- }
- if(!len || pval[len-1] != 0x3b) goto want_more;
- assert(val > 0);
- p += (pval - p) + len - 1; /* Advance past entref */
-
- if(val < 0x80) {
- *buf++ = (char)val;
- } else if(val < 0x800) {
- *buf++ = 0xc0 | ((val >> 6));
- *buf++ = 0x80 | ((val & 0x3f));
- } else if(val < 0x10000) {
- *buf++ = 0xe0 | ((val >> 12));
- *buf++ = 0x80 | ((val >> 6) & 0x3f);
- *buf++ = 0x80 | ((val & 0x3f));
- } else if(val < 0x200000) {
- *buf++ = 0xf0 | ((val >> 18));
- *buf++ = 0x80 | ((val >> 12) & 0x3f);
- *buf++ = 0x80 | ((val >> 6) & 0x3f);
- *buf++ = 0x80 | ((val & 0x3f));
- } else if(val < 0x4000000) {
- *buf++ = 0xf8 | ((val >> 24));
- *buf++ = 0x80 | ((val >> 18) & 0x3f);
- *buf++ = 0x80 | ((val >> 12) & 0x3f);
- *buf++ = 0x80 | ((val >> 6) & 0x3f);
- *buf++ = 0x80 | ((val & 0x3f));
- } else {
- *buf++ = 0xfc | ((val >> 30) & 0x1);
- *buf++ = 0x80 | ((val >> 24) & 0x3f);
- *buf++ = 0x80 | ((val >> 18) & 0x3f);
- *buf++ = 0x80 | ((val >> 12) & 0x3f);
- *buf++ = 0x80 | ((val >> 6) & 0x3f);
- *buf++ = 0x80 | ((val & 0x3f));
- }
- } else {
- /*
- * Ugly, limited parsing of & > <
- */
- char *sc = (char *)memchr(p, 0x3b, len > 5 ? 5 : len);
- if(!sc) goto want_more;
- if((sc - p) == 4
- && p[1] == 0x61 /* 'a' */
- && p[2] == 0x6d /* 'm' */
- && p[3] == 0x70 /* 'p' */) {
- *buf++ = 0x26;
- p = sc;
- continue;
- }
- if((sc - p) == 3) {
- if(p[1] == 0x6c) {
- *buf = 0x3c; /* '<' */
- } else if(p[1] == 0x67) {
- *buf = 0x3e; /* '>' */
- } else {
- /* Unsupported entity reference */
- *buf++ = ch;
- continue;
- }
- if(p[2] != 0x74) {
- /* Unsupported entity reference */
- *buf++ = ch;
- continue;
- }
- buf++;
- p = sc;
- continue;
- }
- /* Unsupported entity reference */
- *buf++ = ch;
- }
-
- continue;
-want_more:
- if(have_more) {
- /*
- * We know that no more data (of the same type)
- * is coming. Copy the rest verbatim.
- */
- *buf++ = ch;
- continue;
- }
- chunk_size = (p - (const char *)chunk_buf);
- /* Processing stalled: need more data */
- break;
- }
-
- st->size = buf - st->buf;
- assert(st->size <= _ns);
- st->buf[st->size] = 0; /* Courtesy termination */
-
- return chunk_size; /* Converted in full */
-}
-
-/*
- * Decode OCTET STRING from the XML element's body.
- */
-static asn_dec_rval_t
-OCTET_STRING__decode_xer(asn_codec_ctx_t *opt_codec_ctx,
- asn_TYPE_descriptor_t *td, void **sptr,
- const char *opt_mname, const void *buf_ptr, size_t size,
- int (*opt_unexpected_tag_decoder)
- (void *struct_ptr, const void *chunk_buf, size_t chunk_size),
- ssize_t (*body_receiver)
- (void *struct_ptr, const void *chunk_buf, size_t chunk_size,
- int have_more)
- ) {
- OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr;
- asn_OCTET_STRING_specifics_t *specs = td->specifics
- ? (asn_OCTET_STRING_specifics_t *)td->specifics
- : &asn_DEF_OCTET_STRING_specs;
- const char *xml_tag = opt_mname ? opt_mname : td->xml_tag;
- asn_struct_ctx_t *ctx; /* Per-structure parser context */
- asn_dec_rval_t rval; /* Return value from the decoder */
- int st_allocated;
-
- /*
- * Create the string if does not exist.
- */
- if(!st) {
- st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size);
- *sptr = (void *)st;
- if(!st) goto sta_failed;
- st_allocated = 1;
- } else {
- st_allocated = 0;
- }
- if(!st->buf) {
- /* This is separate from above section */
- st->buf = (uint8_t *)CALLOC(1, 1);
- if(!st->buf) {
- if(st_allocated) {
- *sptr = 0;
- goto stb_failed;
- } else {
- goto sta_failed;
- }
- }
- }
-
- /* Restore parsing context */
- ctx = (asn_struct_ctx_t *)(((char *)*sptr) + specs->ctx_offset);
-
- return xer_decode_general(opt_codec_ctx, ctx, *sptr, xml_tag,
- buf_ptr, size, opt_unexpected_tag_decoder, body_receiver);
-
-stb_failed:
- FREEMEM(st);
-sta_failed:
- rval.code = RC_FAIL;
- rval.consumed = 0;
- return rval;
-}
-
-/*
- * Decode OCTET STRING from the hexadecimal data.
- */
-asn_dec_rval_t
-OCTET_STRING_decode_xer_hex(asn_codec_ctx_t *opt_codec_ctx,
- asn_TYPE_descriptor_t *td, void **sptr,
- const char *opt_mname, const void *buf_ptr, size_t size) {
- return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname,
- buf_ptr, size, 0, OCTET_STRING__convert_hexadecimal);
-}
-
-/*
- * Decode OCTET STRING from the binary (0/1) data.
- */
-asn_dec_rval_t
-OCTET_STRING_decode_xer_binary(asn_codec_ctx_t *opt_codec_ctx,
- asn_TYPE_descriptor_t *td, void **sptr,
- const char *opt_mname, const void *buf_ptr, size_t size) {
- return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname,
- buf_ptr, size, 0, OCTET_STRING__convert_binary);
-}
-
-/*
- * Decode OCTET STRING from the string (ASCII/UTF-8) data.
- */
-asn_dec_rval_t
-OCTET_STRING_decode_xer_utf8(asn_codec_ctx_t *opt_codec_ctx,
- asn_TYPE_descriptor_t *td, void **sptr,
- const char *opt_mname, const void *buf_ptr, size_t size) {
- return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname,
- buf_ptr, size,
- OCTET_STRING__handle_control_chars,
- OCTET_STRING__convert_entrefs);
-}
-
-static int
-OCTET_STRING_per_get_characters(asn_per_data_t *po, uint8_t *buf,
- size_t units, unsigned int bpc, unsigned int unit_bits,
- long lb, long ub, asn_per_constraints_t *pc) {
- uint8_t *end = buf + units * bpc;
-
- ASN_DEBUG("Expanding %d characters into (%ld..%ld):%d",
- (int)units, lb, ub, unit_bits);
-
- /* X.691: 27.5.4 */
- if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) {
- /* Decode without translation */
- lb = 0;
- } else if(pc && pc->code2value) {
- if(unit_bits > 16)
- return 1; /* FATAL: can't have constrained
- * UniversalString with more than
- * 16 million code points */
- for(; buf < end; buf += bpc) {
- int value;
- int code = per_get_few_bits(po, unit_bits);
- if(code < 0) return -1; /* WMORE */
- value = pc->code2value(code);
- if(value < 0) {
- ASN_DEBUG("Code %d (0x%02x) is"
- " not in map (%ld..%ld)",
- code, code, lb, ub);
- return 1; /* FATAL */
- }
- switch(bpc) {
- case 1:
- *buf = value;
- break;
- case 2:
- buf[0] = value >> 8;
- buf[1] = value;
- break;
- case 4:
- buf[0] = value >> 24;
- buf[1] = value >> 16;
- buf[2] = value >> 8;
- buf[3] = value;
- break;
- }
- }
- return 0;
- }
-
- /* Shortcut the no-op copying to the aligned structure */
- if(lb == 0 && (unit_bits == 8 * bpc)) {
- return per_get_many_bits(po, buf, 0, unit_bits * units);
- }
-
- for(; buf < end; buf += bpc) {
- int code = per_get_few_bits(po, unit_bits);
- int ch = code + lb;
- if(code < 0) return -1; /* WMORE */
- if(ch > ub) {
- ASN_DEBUG("Code %d is out of range (%ld..%ld)",
- ch, lb, ub);
- return 1; /* FATAL */
- }
- switch(bpc) {
- case 1:
- *buf = ch;
- break;
- case 2:
- buf[0] = ch >> 8;
- buf[1] = ch;
- break;
- case 4:
- buf[0] = ch >> 24;
- buf[1] = ch >> 16;
- buf[2] = ch >> 8;
- buf[3] = ch;
- break;
- }
- }
-
- return 0;
-}
-
-static int
-OCTET_STRING_per_put_characters(asn_per_outp_t *po, const uint8_t *buf,
- size_t units, unsigned int bpc, unsigned int unit_bits,
- long lb, long ub, asn_per_constraints_t *pc) {
- const uint8_t *end = buf + units * bpc;
-
- ASN_DEBUG("Squeezing %d characters into (%ld..%ld):%d (%d bpc)",
- (int)units, lb, ub, unit_bits, bpc);
-
- /* X.691: 27.5.4 */
- if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) {
- /* Encode as is */
- lb = 0;
- } else if(pc && pc->value2code) {
- for(; buf < end; buf += bpc) {
- int code;
- uint32_t value;
- switch(bpc) {
- case 1:
- value = *(const uint8_t *)buf;
- break;
- case 2:
- value = (buf[0] << 8) | buf[1];
- break;
- case 4:
- value = (buf[0] << 24) | (buf[1] << 16)
- | (buf[2] << 8) | buf[3];
- break;
- default:
- return -1;
- }
- code = pc->value2code(value);
- if(code < 0) {
- ASN_DEBUG("Character %d (0x%02x) is"
- " not in map (%ld..%ld)",
- *buf, *buf, lb, ub);
- return -1;
- }
- if(per_put_few_bits(po, code, unit_bits))
- return -1;
- }
- }
-
- /* Shortcut the no-op copying to the aligned structure */
- if(lb == 0 && (unit_bits == 8 * bpc)) {
- return per_put_many_bits(po, buf, unit_bits * units);
- }
-
- for(ub -= lb; buf < end; buf += bpc) {
- int ch;
- uint32_t value;
- switch(bpc) {
- case 1:
- value = *(const uint8_t *)buf;
- break;
- case 2:
- value = (buf[0] << 8) | buf[1];
- break;
- case 4:
- value = (buf[0] << 24) | (buf[1] << 16)
- | (buf[2] << 8) | buf[3];
- break;
- default:
- return -1;
- }
- ch = value - lb;
- if(ch < 0 || ch > ub) {
- ASN_DEBUG("Character %d (0x%02x)"
- " is out of range (%ld..%ld)",
- *buf, *buf, lb, ub + lb);
- return -1;
- }
- if(per_put_few_bits(po, ch, unit_bits))
- return -1;
- }
-
- return 0;
-}
-
-asn_dec_rval_t
-OCTET_STRING_decode_uper(asn_codec_ctx_t *opt_codec_ctx,
- asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints,
- void **sptr, asn_per_data_t *pd) {
-
- asn_OCTET_STRING_specifics_t *specs = td->specifics
- ? (asn_OCTET_STRING_specifics_t *)td->specifics
- : &asn_DEF_OCTET_STRING_specs;
- asn_per_constraints_t *pc = constraints ? constraints
- : td->per_constraints;
- asn_per_constraint_t *cval;
- asn_per_constraint_t *csiz;
- asn_dec_rval_t rval = { RC_OK, 0 };
- BIT_STRING_t *st = (BIT_STRING_t *)*sptr;
- ssize_t consumed_myself = 0;
- int repeat;
- enum {
- OS__BPC_BIT = 0,
- OS__BPC_CHAR = 1,
- OS__BPC_U16 = 2,
- OS__BPC_U32 = 4
- } bpc; /* Bytes per character */
- unsigned int unit_bits;
- unsigned int canonical_unit_bits;
-
- (void)opt_codec_ctx;
-
- if(pc) {
- cval = &pc->value;
- csiz = &pc->size;
- } else {
- cval = &asn_DEF_OCTET_STRING_constraints.value;
- csiz = &asn_DEF_OCTET_STRING_constraints.size;
- }
-
- switch(specs->subvariant) {
- default:
- case ASN_OSUBV_ANY:
- ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant);
- RETURN(RC_FAIL);
- case ASN_OSUBV_BIT:
- canonical_unit_bits = unit_bits = 1;
- bpc = OS__BPC_BIT;
- break;
- case ASN_OSUBV_STR:
- canonical_unit_bits = unit_bits = 8;
- if(cval->flags & APC_CONSTRAINED)
- unit_bits = cval->range_bits;
- bpc = OS__BPC_CHAR;
- break;
- case ASN_OSUBV_U16:
- canonical_unit_bits = unit_bits = 16;
- if(cval->flags & APC_CONSTRAINED)
- unit_bits = cval->range_bits;
- bpc = OS__BPC_U16;
- break;
- case ASN_OSUBV_U32:
- canonical_unit_bits = unit_bits = 32;
- if(cval->flags & APC_CONSTRAINED)
- unit_bits = cval->range_bits;
- bpc = OS__BPC_U32;
- break;
- }
-
- /*
- * Allocate the string.
- */
- if(!st) {
- st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size));
- if(!st) RETURN(RC_FAIL);
- }
-
- ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d",
- csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible",
- csiz->lower_bound, csiz->upper_bound, csiz->effective_bits);
-
- if(csiz->flags & APC_EXTENSIBLE) {
- int inext = per_get_few_bits(pd, 1);
- if(inext < 0) RETURN(RC_WMORE);
- if(inext) {
- csiz = &asn_DEF_OCTET_STRING_constraints.size;
- cval = &asn_DEF_OCTET_STRING_constraints.value;
- unit_bits = canonical_unit_bits;
- }
- }
-
- if(csiz->effective_bits >= 0) {
- FREEMEM(st->buf);
- if(bpc) {
- st->size = csiz->upper_bound * bpc;
- } else {
- st->size = (csiz->upper_bound + 7) >> 3;
- }
- st->buf = (uint8_t *)MALLOC(st->size + 1);
- if(!st->buf) {
- st->size = 0;
- RETURN(RC_FAIL);
- }
- }
-
- /* X.691, #16.5: zero-length encoding */
- /* X.691, #16.6: short fixed length encoding (up to 2 octets) */
- /* X.691, #16.7: long fixed length encoding (up to 64K octets) */
- if(csiz->effective_bits == 0) {
- int ret;
- if(bpc) {
- ASN_DEBUG("Encoding OCTET STRING size %ld",
- csiz->upper_bound);
- ret = OCTET_STRING_per_get_characters(pd, st->buf,
- csiz->upper_bound, bpc, unit_bits,
- cval->lower_bound, cval->upper_bound, pc);
- if(ret > 0) RETURN(RC_FAIL);
- } else {
- ASN_DEBUG("Encoding BIT STRING size %ld",
- csiz->upper_bound);
- ret = per_get_many_bits(pd, st->buf, 0,
- unit_bits * csiz->upper_bound);
- }
- if(ret < 0) RETURN(RC_WMORE);
- consumed_myself += unit_bits * csiz->upper_bound;
- st->buf[st->size] = 0;
- if(bpc == 0) {
- int ubs = (csiz->upper_bound & 0x7);
- st->bits_unused = ubs ? 8 - ubs : 0;
- }
- RETURN(RC_OK);
- }
-
- st->size = 0;
- do {
- ssize_t raw_len;
- ssize_t len_bytes;
- ssize_t len_bits;
- void *p;
- int ret;
-
- /* Get the PER length */
- raw_len = uper_get_length(pd, csiz->effective_bits, &repeat);
- if(raw_len < 0) RETURN(RC_WMORE);
- raw_len += csiz->lower_bound;
-
- ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)",
- (long)csiz->effective_bits, (long)raw_len,
- repeat ? "repeat" : "once", td->name);
- if(bpc) {
- len_bytes = raw_len * bpc;
- len_bits = len_bytes * unit_bits;
- } else {
- len_bits = raw_len;
- len_bytes = (len_bits + 7) >> 3;
- if(len_bits & 0x7)
- st->bits_unused = 8 - (len_bits & 0x7);
- /* len_bits be multiple of 16K if repeat is set */
- }
- p = REALLOC(st->buf, st->size + len_bytes + 1);
- if(!p) RETURN(RC_FAIL);
- st->buf = (uint8_t *)p;
-
- if(bpc) {
- ret = OCTET_STRING_per_get_characters(pd,
- &st->buf[st->size], raw_len, bpc, unit_bits,
- cval->lower_bound, cval->upper_bound, pc);
- if(ret > 0) RETURN(RC_FAIL);
- } else {
- ret = per_get_many_bits(pd, &st->buf[st->size],
- 0, len_bits);
- }
- if(ret < 0) RETURN(RC_WMORE);
- st->size += len_bytes;
- } while(repeat);
- st->buf[st->size] = 0; /* nul-terminate */
-
- return rval;
-}
-
-asn_enc_rval_t
-OCTET_STRING_encode_uper(asn_TYPE_descriptor_t *td,
- asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) {
-
- asn_OCTET_STRING_specifics_t *specs = td->specifics
- ? (asn_OCTET_STRING_specifics_t *)td->specifics
- : &asn_DEF_OCTET_STRING_specs;
- asn_per_constraints_t *pc = constraints ? constraints
- : td->per_constraints;
- asn_per_constraint_t *cval;
- asn_per_constraint_t *csiz;
- const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
- asn_enc_rval_t er = { 0, 0, 0 };
- int inext = 0; /* Lies not within extension root */
- unsigned int unit_bits;
- unsigned int canonical_unit_bits;
- unsigned int sizeinunits;
- const uint8_t *buf;
- int ret;
- enum {
- OS__BPC_BIT = 0,
- OS__BPC_CHAR = 1,
- OS__BPC_U16 = 2,
- OS__BPC_U32 = 4
- } bpc; /* Bytes per character */
- int ct_extensible;
-
- if(!st || (!st->buf && st->size))
- _ASN_ENCODE_FAILED;
-
- if(pc) {
- cval = &pc->value;
- csiz = &pc->size;
- } else {
- cval = &asn_DEF_OCTET_STRING_constraints.value;
- csiz = &asn_DEF_OCTET_STRING_constraints.size;
- }
- ct_extensible = csiz->flags & APC_EXTENSIBLE;
-
- switch(specs->subvariant) {
- default:
- case ASN_OSUBV_ANY:
- _ASN_ENCODE_FAILED;
- case ASN_OSUBV_BIT:
- canonical_unit_bits = unit_bits = 1;
- bpc = OS__BPC_BIT;
- sizeinunits = st->size * 8 - (st->bits_unused & 0x07);
- ASN_DEBUG("BIT STRING of %d bytes, %d bits unused",
- sizeinunits, st->bits_unused);
- break;
- case ASN_OSUBV_STR:
- canonical_unit_bits = unit_bits = 8;
- if(cval->flags & APC_CONSTRAINED)
- unit_bits = cval->range_bits;
- bpc = OS__BPC_CHAR;
- sizeinunits = st->size;
- break;
- case ASN_OSUBV_U16:
- canonical_unit_bits = unit_bits = 16;
- if(cval->flags & APC_CONSTRAINED)
- unit_bits = cval->range_bits;
- bpc = OS__BPC_U16;
- sizeinunits = st->size / 2;
- break;
- case ASN_OSUBV_U32:
- canonical_unit_bits = unit_bits = 32;
- if(cval->flags & APC_CONSTRAINED)
- unit_bits = cval->range_bits;
- bpc = OS__BPC_U32;
- sizeinunits = st->size / 4;
- break;
- }
-
- ASN_DEBUG("Encoding %s into %d units of %d bits"
- " (%ld..%ld, effective %d)%s",
- td->name, sizeinunits, unit_bits,
- csiz->lower_bound, csiz->upper_bound,
- csiz->effective_bits, ct_extensible ? " EXT" : "");
-
- /* Figure out wheter size lies within PER visible constraint */
-
- if(csiz->effective_bits >= 0) {
- if((int)sizeinunits < csiz->lower_bound
- || (int)sizeinunits > csiz->upper_bound) {
- if(ct_extensible) {
- cval = &asn_DEF_OCTET_STRING_constraints.value;
- csiz = &asn_DEF_OCTET_STRING_constraints.size;
- unit_bits = canonical_unit_bits;
- inext = 1;
- } else
- _ASN_ENCODE_FAILED;
- }
- } else {
- inext = 0;
- }
-
- if(ct_extensible) {
- /* Declare whether length is [not] within extension root */
- if(per_put_few_bits(po, inext, 1))
- _ASN_ENCODE_FAILED;
- }
-
- /* X.691, #16.5: zero-length encoding */
- /* X.691, #16.6: short fixed length encoding (up to 2 octets) */
- /* X.691, #16.7: long fixed length encoding (up to 64K octets) */
- if(csiz->effective_bits >= 0) {
- ASN_DEBUG("Encoding %d bytes (%ld), length in %d bits",
- st->size, sizeinunits - csiz->lower_bound,
- csiz->effective_bits);
- ret = per_put_few_bits(po, sizeinunits - csiz->lower_bound,
- csiz->effective_bits);
- if(ret) _ASN_ENCODE_FAILED;
- if(bpc) {
- ret = OCTET_STRING_per_put_characters(po, st->buf,
- sizeinunits, bpc, unit_bits,
- cval->lower_bound, cval->upper_bound, pc);
- } else {
- ret = per_put_many_bits(po, st->buf,
- sizeinunits * unit_bits);
- }
- if(ret) _ASN_ENCODE_FAILED;
- _ASN_ENCODED_OK(er);
- }
-
- ASN_DEBUG("Encoding %d bytes", st->size);
-
- if(sizeinunits == 0) {
- if(uper_put_length(po, 0))
- _ASN_ENCODE_FAILED;
- _ASN_ENCODED_OK(er);
- }
-
- buf = st->buf;
- while(sizeinunits) {
- ssize_t maySave = uper_put_length(po, sizeinunits);
- if(maySave < 0) _ASN_ENCODE_FAILED;
-
- ASN_DEBUG("Encoding %ld of %ld",
- (long)maySave, (long)sizeinunits);
-
- if(bpc) {
- ret = OCTET_STRING_per_put_characters(po, buf,
- maySave, bpc, unit_bits,
- cval->lower_bound, cval->upper_bound, pc);
- } else {
- ret = per_put_many_bits(po, buf, maySave * unit_bits);
- }
- if(ret) _ASN_ENCODE_FAILED;
-
- if(bpc)
- buf += maySave * bpc;
- else
- buf += maySave >> 3;
- sizeinunits -= maySave;
- assert(!(maySave & 0x07) || !sizeinunits);
- }
-
- _ASN_ENCODED_OK(er);
-}
-
-int
-OCTET_STRING_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
- asn_app_consume_bytes_f *cb, void *app_key) {
- static const char *h2c = "0123456789ABCDEF";
- const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
- char scratch[16 * 3 + 4];
- char *p = scratch;
- uint8_t *buf;
- uint8_t *end;
- size_t i;
-
- (void)td; /* Unused argument */
-
- if(!st || (!st->buf && st->size))
- return (cb("", 8, app_key) < 0) ? -1 : 0;
-
- /*
- * Dump the contents of the buffer in hexadecimal.
- */
- buf = st->buf;
- end = buf + st->size;
- for(i = 0; buf < end; buf++, i++) {
- if(!(i % 16) && (i || st->size > 16)) {
- if(cb(scratch, p - scratch, app_key) < 0)
- return -1;
- _i_INDENT(1);
- p = scratch;
- }
- *p++ = h2c[(*buf >> 4) & 0x0F];
- *p++ = h2c[*buf & 0x0F];
- *p++ = 0x20;
- }
-
- if(p > scratch) {
- p--; /* Remove the tail space */
- if(cb(scratch, p - scratch, app_key) < 0)
- return -1;
- }
-
- return 0;
-}
-
-int
-OCTET_STRING_print_utf8(asn_TYPE_descriptor_t *td, const void *sptr,
- int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
- const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
-
- (void)td; /* Unused argument */
- (void)ilevel; /* Unused argument */
-
- if(st && (st->buf || !st->size)) {
- return (cb(st->buf, st->size, app_key) < 0) ? -1 : 0;
- } else {
- return (cb("", 8, app_key) < 0) ? -1 : 0;
- }
-}
-
-void
-OCTET_STRING_free(asn_TYPE_descriptor_t *td, void *sptr, int contents_only) {
- OCTET_STRING_t *st = (OCTET_STRING_t *)sptr;
- asn_OCTET_STRING_specifics_t *specs = td->specifics
- ? (asn_OCTET_STRING_specifics_t *)td->specifics
- : &asn_DEF_OCTET_STRING_specs;
- asn_struct_ctx_t *ctx = (asn_struct_ctx_t *)
- ((char *)st + specs->ctx_offset);
- struct _stack *stck;
-
- if(!td || !st)
- return;
-
- ASN_DEBUG("Freeing %s as OCTET STRING", td->name);
-
- if(st->buf) {
- FREEMEM(st->buf);
- st->buf = 0;
- }
-
- /*
- * Remove decode-time stack.
- */
- stck = (struct _stack *)ctx->ptr;
- if(stck) {
- while(stck->tail) {
- struct _stack_el *sel = stck->tail;
- stck->tail = sel->prev;
- FREEMEM(sel);
- }
- FREEMEM(stck);
- }
-
- if(!contents_only) {
- FREEMEM(st);
- }
-}
-
-/*
- * Conversion routines.
- */
-int
-OCTET_STRING_fromBuf(OCTET_STRING_t *st, const char *str, int len) {
- void *buf;
-
- if(st == 0 || (str == 0 && len)) {
- errno = EINVAL;
- return -1;
- }
-
- /*
- * Clear the OCTET STRING.
- */
- if(str == NULL) {
- FREEMEM(st->buf);
- st->buf = 0;
- st->size = 0;
- return 0;
- }
-
- /* Determine the original string size, if not explicitly given */
- if(len < 0)
- len = strlen(str);
-
- /* Allocate and fill the memory */
- buf = MALLOC(len + 1);
- if(buf == NULL)
- return -1;
-
- memcpy(buf, str, len);
- ((uint8_t *)buf)[len] = '\0'; /* Couldn't use memcpy(len+1)! */
- FREEMEM(st->buf);
- st->buf = (uint8_t *)buf;
- st->size = len;
-
- return 0;
-}
-
-OCTET_STRING_t *
-OCTET_STRING_new_fromBuf(asn_TYPE_descriptor_t *td, const char *str, int len) {
- asn_OCTET_STRING_specifics_t *specs = td->specifics
- ? (asn_OCTET_STRING_specifics_t *)td->specifics
- : &asn_DEF_OCTET_STRING_specs;
- OCTET_STRING_t *st;
-
- st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size);
- if(st && str && OCTET_STRING_fromBuf(st, str, len)) {
- FREEMEM(st);
- st = NULL;
- }
-
- return st;
-}
-
diff --git a/src/third_party/asn1/OCTET_STRING.h b/src/third_party/asn1/OCTET_STRING.h
deleted file mode 100644
index 11a94e08..00000000
--- a/src/third_party/asn1/OCTET_STRING.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*-
- * Copyright (c) 2003 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#ifndef _OCTET_STRING_H_
-#define _OCTET_STRING_H_
-
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- typedef struct OCTET_STRING {
- uint8_t *buf; /* Buffer with consecutive OCTET_STRING bits */
- int size; /* Size of the buffer */
-
- asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */
- } OCTET_STRING_t;
-
- extern asn_TYPE_descriptor_t asn_DEF_OCTET_STRING;
-
- asn_struct_free_f OCTET_STRING_free;
- asn_struct_print_f OCTET_STRING_print;
- asn_struct_print_f OCTET_STRING_print_utf8;
- ber_type_decoder_f OCTET_STRING_decode_ber;
- der_type_encoder_f OCTET_STRING_encode_der;
- xer_type_decoder_f OCTET_STRING_decode_xer_hex; /* Hexadecimal */
- xer_type_decoder_f OCTET_STRING_decode_xer_binary; /* 01010111010 */
- xer_type_decoder_f OCTET_STRING_decode_xer_utf8; /* ASCII/UTF-8 */
- xer_type_encoder_f OCTET_STRING_encode_xer;
- xer_type_encoder_f OCTET_STRING_encode_xer_utf8;
- per_type_decoder_f OCTET_STRING_decode_uper;
- per_type_encoder_f OCTET_STRING_encode_uper;
-
- /******************************
- * Handy conversion routines. *
- ******************************/
-
- /*
- * This function clears the previous value of the OCTET STRING (if any)
- * and then allocates a new memory with the specified content (str/size).
- * If size = -1, the size of the original string will be determined
- * using strlen(str).
- * If str equals to NULL, the function will silently clear the
- * current contents of the OCTET STRING.
- * Returns 0 if it was possible to perform operation, -1 otherwise.
- */
- int OCTET_STRING_fromBuf(OCTET_STRING_t *s, const char *str, int size);
-
- /* Handy conversion from the C string into the OCTET STRING. */
-#define OCTET_STRING_fromString(s, str) OCTET_STRING_fromBuf(s, str, -1)
-
- /*
- * Allocate and fill the new OCTET STRING and return a pointer to the newly
- * allocated object. NULL is permitted in str: the function will just allocate
- * empty OCTET STRING.
- */
- OCTET_STRING_t *OCTET_STRING_new_fromBuf(asn_TYPE_descriptor_t *td,
- const char *str, int size);
-
- /****************************
- * Internally useful stuff. *
- ****************************/
-
- typedef struct asn_OCTET_STRING_specifics_s {
- /*
- * Target structure description.
- */
- int struct_size; /* Size of the structure */
- int ctx_offset; /* Offset of the asn_struct_ctx_t member */
-
- enum asn_OS_Subvariant {
- ASN_OSUBV_ANY, /* The open type (ANY) */
- ASN_OSUBV_BIT, /* BIT STRING */
- ASN_OSUBV_STR, /* String types, not {BMP,Universal}String */
- ASN_OSUBV_U16, /* 16-bit character (BMPString) */
- ASN_OSUBV_U32 /* 32-bit character (UniversalString) */
- } subvariant;
- } asn_OCTET_STRING_specifics_t;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _OCTET_STRING_H_ */
diff --git a/src/third_party/asn1/UTF8String.c b/src/third_party/asn1/UTF8String.c
deleted file mode 100644
index b4b908bb..00000000
--- a/src/third_party/asn1/UTF8String.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004, 2006 Lev Walkin .
- * All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#include
-#include
-
-/*
- * UTF8String basic type description.
- */
-static ber_tlv_tag_t asn_DEF_UTF8String_tags[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)), /* [UNIVERSAL 12] IMPLICIT ...*/
- (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), /* ... OCTET STRING */
-};
-asn_TYPE_descriptor_t asn_DEF_UTF8String = {
- "UTF8String",
- "UTF8String",
- OCTET_STRING_free,
- UTF8String_print,
- UTF8String_constraint, /* Check for invalid codes, etc. */
- OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */
- OCTET_STRING_encode_der,
- OCTET_STRING_decode_xer_utf8,
- OCTET_STRING_encode_xer_utf8,
- OCTET_STRING_decode_uper,
- OCTET_STRING_encode_uper,
- 0, /* Use generic outmost tag fetcher */
- asn_DEF_UTF8String_tags,
- sizeof(asn_DEF_UTF8String_tags)
- / sizeof(asn_DEF_UTF8String_tags[0]) - 1,
- asn_DEF_UTF8String_tags,
- sizeof(asn_DEF_UTF8String_tags)
- / sizeof(asn_DEF_UTF8String_tags[0]),
- 0, /* No PER visible constraints */
- 0, 0, /* No members */
- 0 /* No specifics */
-};
-
-/*
- * This is the table of length expectations.
- * The second half of this table is only applicable to the long sequences.
- */
-static int UTF8String_ht[2][16] = {
- { /* 0x0 ... 0x7 */
- /* 0000..0111 */
- 1, 1, 1, 1, 1, 1, 1, 1,
- /* 1000..1011(0), 1100..1101(2), 1110(3), 1111(-1) */
- 0, 0, 0, 0, 2, 2, 3, -1
- },
- { /* 0xF0 .. 0xF7 */
- /* 11110000..11110111 */
- 4, 4, 4, 4, 4, 4, 4, 4,
- 5, 5, 5, 5, 6, 6, -1, -1
- }
-};
-static int32_t UTF8String_mv[7] = { 0, 0,
- 0x00000080,
- 0x00000800,
- 0x00010000,
- 0x00200000,
- 0x04000000
- };
-
-/* Internal aliases for return codes */
-#define U8E_TRUNC -1 /* UTF-8 sequence truncated */
-#define U8E_ILLSTART -2 /* Illegal UTF-8 sequence start */
-#define U8E_NOTCONT -3 /* Continuation expectation failed */
-#define U8E_NOTMIN -4 /* Not minimal length encoding */
-#define U8E_EINVAL -5 /* Invalid arguments */
-
-int
-UTF8String_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- ssize_t len = UTF8String_length((const UTF8String_t *)sptr);
- switch(len) {
- case U8E_EINVAL:
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given", td->name);
- break;
- case U8E_TRUNC:
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: truncated UTF-8 sequence (%s:%d)",
- td->name, __FILE__, __LINE__);
- break;
- case U8E_ILLSTART:
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: UTF-8 illegal start of encoding (%s:%d)",
- td->name, __FILE__, __LINE__);
- break;
- case U8E_NOTCONT:
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: UTF-8 not continuation (%s:%d)",
- td->name, __FILE__, __LINE__);
- break;
- case U8E_NOTMIN:
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: UTF-8 not minimal sequence (%s:%d)",
- td->name, __FILE__, __LINE__);
- break;
- }
- return (len < 0) ? -1 : 0;
-}
-
-static ssize_t
-UTF8String__process(const UTF8String_t *st, uint32_t *dst, size_t dstlen) {
- size_t length;
- uint8_t *buf = st->buf;
- uint8_t *end = buf + st->size;
- uint32_t *dstend = dst + dstlen;
-
- for(length = 0; buf < end; length++) {
- int ch = *buf;
- uint8_t *cend;
- int32_t value;
- int want;
-
- /* Compute the sequence length */
- want = UTF8String_ht[0][ch >> 4];
- switch(want) {
- case -1:
- /* Second half of the table, long sequence */
- want = UTF8String_ht[1][ch & 0x0F];
- if(want != -1) break;
- /* Fall through */
- case 0:
- return U8E_ILLSTART;
- }
-
- /* assert(want >= 1 && want <= 6) */
-
- /* Check character sequence length */
- if(buf + want > end) return U8E_TRUNC;
-
- value = ch & (0xff >> want);
- cend = buf + want;
- for(buf++; buf < cend; buf++) {
- ch = *buf;
- if(ch < 0x80 || ch > 0xbf) return U8E_NOTCONT;
- value = (value << 6) | (ch & 0x3F);
- }
- if(value < UTF8String_mv[want])
- return U8E_NOTMIN;
- if(dst < dstend)
- *dst++ = value; /* Record value */
- }
-
- if(dst < dstend) *dst = 0; /* zero-terminate */
-
- return length;
-}
-
-
-ssize_t
-UTF8String_length(const UTF8String_t *st) {
- if(st && st->buf) {
- return UTF8String__process(st, 0, 0);
- } else {
- return U8E_EINVAL;
- }
-}
-
-size_t
-UTF8String_to_wcs(const UTF8String_t *st, uint32_t *dst, size_t dstlen) {
- if(st && st->buf) {
- ssize_t ret = UTF8String__process(st, dst, dstlen);
- return (ret < 0) ? 0 : ret;
- } else {
- return 0;
- }
-}
-
-int
-UTF8String_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
- asn_app_consume_bytes_f *cb, void *app_key) {
- const UTF8String_t *st = (const UTF8String_t *)sptr;
-
- (void)td; /* Unused argument */
- (void)ilevel; /* Unused argument */
-
- if(st && st->buf) {
- return (cb(st->buf, st->size, app_key) < 0) ? -1 : 0;
- } else {
- return (cb("", 8, app_key) < 0) ? -1 : 0;
- }
-}
diff --git a/src/third_party/asn1/UTF8String.h b/src/third_party/asn1/UTF8String.h
deleted file mode 100644
index 475347ff..00000000
--- a/src/third_party/asn1/UTF8String.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#ifndef _UTF8String_H_
-#define _UTF8String_H_
-
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- typedef OCTET_STRING_t UTF8String_t; /* Implemented via OCTET STRING */
-
- extern asn_TYPE_descriptor_t asn_DEF_UTF8String;
-
- asn_struct_print_f UTF8String_print;
- asn_constr_check_f UTF8String_constraint;
-
- /*
- * Returns length of the given UTF-8 string in characters,
- * or a negative error code:
- * -1: UTF-8 sequence truncated
- * -2: Illegal UTF-8 sequence start
- * -3: Continuation expectation failed
- * -4: Not minimal length encoding
- * -5: Invalid arguments
- */
- ssize_t UTF8String_length(const UTF8String_t *st);
-
- /*
- * Convert the UTF-8 string into a sequence of wide characters.
- * Returns the number of characters necessary.
- * Returned value might be greater than dstlen.
- * In case of conversion error, 0 is returned.
- *
- * If st points to a valid UTF-8 string, calling
- * UTF8String_to_wcs(st, 0, 0);
- * is equivalent to
- * UTF8String_length(const UTF8String_t *st);
- */
- size_t UTF8String_to_wcs(const UTF8String_t *st, uint32_t *dst, size_t dstlen);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _UTF8String_H_ */
diff --git a/src/third_party/asn1/asn_SEQUENCE_OF.c b/src/third_party/asn1/asn_SEQUENCE_OF.c
deleted file mode 100644
index ec952fc9..00000000
--- a/src/third_party/asn1/asn_SEQUENCE_OF.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#include
-#include
-
-typedef A_SEQUENCE_OF(void) asn_sequence;
-
-void
-asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free) {
- asn_sequence *as = (asn_sequence *)asn_sequence_of_x;
-
- if(as) {
- void *ptr;
- int n;
-
- if(number < 0 || number >= as->count)
- return; /* Nothing to delete */
-
- if(_do_free && as->free) {
- ptr = as->array[number];
- } else {
- ptr = 0;
- }
-
- /*
- * Shift all elements to the left to hide the gap.
- */
- --as->count;
- for(n = number; n < as->count; n++)
- as->array[n] = as->array[n+1];
-
- /*
- * Invoke the third-party function only when the state
- * of the parent structure is consistent.
- */
- if(ptr) as->free(ptr);
- }
-}
-
diff --git a/src/third_party/asn1/asn_SEQUENCE_OF.h b/src/third_party/asn1/asn_SEQUENCE_OF.h
deleted file mode 100644
index 33eeb284..00000000
--- a/src/third_party/asn1/asn_SEQUENCE_OF.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#ifndef ASN_SEQUENCE_OF_H
-#define ASN_SEQUENCE_OF_H
-
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /*
- * SEQUENCE OF is the same as SET OF with a tiny difference:
- * the delete operation preserves the initial order of elements
- * and thus MAY operate in non-constant time.
- */
-#define A_SEQUENCE_OF(type) A_SET_OF(type)
-
-#define ASN_SEQUENCE_ADD(headptr, ptr) \
- asn_sequence_add((headptr), (ptr))
-
- /***********************************************
- * Implementation of the SEQUENCE OF structure.
- */
-
-#define asn_sequence_add asn_set_add
-#define asn_sequence_empty asn_set_empty
-
- /*
- * Delete the element from the set by its number (base 0).
- * This is NOT a constant-time operation.
- * The order of elements is preserved.
- * If _do_free is given AND the (*free) is initialized, the element
- * will be freed using the custom (*free) function as well.
- */
- void asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free);
-
- /*
- * Cope with different conversions requirements to/from void in C and C++.
- * This is mostly useful for support library.
- */
- typedef A_SEQUENCE_OF(void) asn_anonymous_sequence_;
-#define _A_SEQUENCE_FROM_VOID(ptr) ((asn_anonymous_sequence_ *)(ptr))
-#define _A_CSEQUENCE_FROM_VOID(ptr) ((const asn_anonymous_sequence_ *)(ptr))
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ASN_SEQUENCE_OF_H */
diff --git a/src/third_party/asn1/asn_SET_OF.c b/src/third_party/asn1/asn_SET_OF.c
deleted file mode 100644
index 944f2cb8..00000000
--- a/src/third_party/asn1/asn_SET_OF.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#include
-#include
-#include
-
-/*
- * Add another element into the set.
- */
-int
-asn_set_add(void *asn_set_of_x, void *ptr) {
- asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x);
-
- if(as == 0 || ptr == 0) {
- errno = EINVAL; /* Invalid arguments */
- return -1;
- }
-
- /*
- * Make sure there's enough space to insert an element.
- */
- if(as->count == as->size) {
- int _newsize = as->size ? (as->size << 1) : 4;
- void *_new_arr;
- _new_arr = REALLOC(as->array, _newsize * sizeof(as->array[0]));
- if(_new_arr) {
- as->array = (void **)_new_arr;
- as->size = _newsize;
- } else {
- /* ENOMEM */
- return -1;
- }
- }
-
- as->array[as->count++] = ptr;
-
- return 0;
-}
-
-void
-asn_set_del(void *asn_set_of_x, int number, int _do_free) {
- asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x);
-
- if(as) {
- void *ptr;
- if(number < 0 || number >= as->count)
- return;
-
- if(_do_free && as->free) {
- ptr = as->array[number];
- } else {
- ptr = 0;
- }
-
- as->array[number] = as->array[--as->count];
-
- /*
- * Invoke the third-party function only when the state
- * of the parent structure is consistent.
- */
- if(ptr) as->free(ptr);
- }
-}
-
-/*
- * Free the contents of the set, do not free the set itself.
- */
-void
-asn_set_empty(void *asn_set_of_x) {
- asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x);
-
- if(as) {
- if(as->array) {
- if(as->free) {
- while(as->count--)
- as->free(as->array[as->count]);
- }
- FREEMEM(as->array);
- as->array = 0;
- }
- as->count = 0;
- as->size = 0;
- }
-
-}
-
diff --git a/src/third_party/asn1/asn_SET_OF.h b/src/third_party/asn1/asn_SET_OF.h
deleted file mode 100644
index 973b452f..00000000
--- a/src/third_party/asn1/asn_SET_OF.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#ifndef ASN_SET_OF_H
-#define ASN_SET_OF_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define A_SET_OF(type) \
- struct { \
- type **array; \
- int count; /* Meaningful size */ \
- int size; /* Allocated size */ \
- void (*free)(type *); \
- }
-
-#define ASN_SET_ADD(headptr, ptr) \
- asn_set_add((headptr), (ptr))
-
- /*******************************************
- * Implementation of the SET OF structure.
- */
-
- /*
- * Add another structure into the set by its pointer.
- * RETURN VALUES:
- * 0 for success and -1/errno for failure.
- */
- int asn_set_add(void *asn_set_of_x, void *ptr);
-
- /*
- * Delete the element from the set by its number (base 0).
- * This is a constant-time operation. The order of elements before the
- * deleted ones is guaranteed, the order of elements after the deleted
- * one is NOT guaranteed.
- * If _do_free is given AND the (*free) is initialized, the element
- * will be freed using the custom (*free) function as well.
- */
- void asn_set_del(void *asn_set_of_x, int number, int _do_free);
-
- /*
- * Empty the contents of the set. Will free the elements, if (*free) is given.
- * Will NOT free the set itself.
- */
- void asn_set_empty(void *asn_set_of_x);
-
- /*
- * Cope with different conversions requirements to/from void in C and C++.
- * This is mostly useful for support library.
- */
- typedef A_SET_OF(void) asn_anonymous_set_;
-#define _A_SET_FROM_VOID(ptr) ((asn_anonymous_set_ *)(ptr))
-#define _A_CSET_FROM_VOID(ptr) ((const asn_anonymous_set_ *)(ptr))
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ASN_SET_OF_H */
diff --git a/src/third_party/asn1/asn_application.h b/src/third_party/asn1/asn_application.h
deleted file mode 100644
index c762dd92..00000000
--- a/src/third_party/asn1/asn_application.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*-
- * Copyright (c) 2004, 2006 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-/*
- * Application-level ASN.1 callbacks.
- */
-#ifndef _ASN_APPLICATION_H_
-#define _ASN_APPLICATION_H_
-
-#include "asn_system.h" /* for platform-dependent types */
-#include "asn_codecs.h" /* for ASN.1 codecs specifics */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /*
- * Generic type of an application-defined callback to return various
- * types of data to the application.
- * EXPECTED RETURN VALUES:
- * -1: Failed to consume bytes. Abort the mission.
- * Non-negative return values indicate success, and ignored.
- */
- typedef int (asn_app_consume_bytes_f)(const void *buffer, size_t size,
- void *application_specific_key);
-
- /*
- * A callback of this type is called whenever constraint validation fails
- * on some ASN.1 type. See "constraints.h" for more details on constraint
- * validation.
- * This callback specifies a descriptor of the ASN.1 type which failed
- * the constraint check, as well as human readable message on what
- * particular constraint has failed.
- */
- typedef void (asn_app_constraint_failed_f)(void *application_specific_key,
- struct asn_TYPE_descriptor_s *type_descriptor_which_failed,
- const void *structure_which_failed_ptr,
- const char *error_message_format, ...) GCC_PRINTFLIKE(4, 5);
-
-#ifdef __cplusplus
-}
-#endif
-
-#include "constr_TYPE.h" /* for asn_TYPE_descriptor_t */
-
-#endif /* _ASN_APPLICATION_H_ */
diff --git a/src/third_party/asn1/asn_codecs.h b/src/third_party/asn1/asn_codecs.h
deleted file mode 100644
index 24784f0d..00000000
--- a/src/third_party/asn1/asn_codecs.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004, 2005 Lev Walkin .
- * All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#ifndef _ASN_CODECS_H_
-#define _ASN_CODECS_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- struct asn_TYPE_descriptor_s; /* Forward declaration */
-
- /*
- * This structure defines a set of parameters that may be passed
- * to every ASN.1 encoder or decoder function.
- * WARNING: if max_stack_size member is set, and you are calling the
- * function pointers of the asn_TYPE_descriptor_t directly,
- * this structure must be ALLOCATED ON THE STACK!
- * If you can't always satisfy this requirement, use ber_decode(),
- * xer_decode() and uper_decode() functions instead.
- */
- typedef struct asn_codec_ctx_s {
- /*
- * Limit the decoder routines to use no (much) more stack than a given
- * number of bytes. Most of decoders are stack-based, and this
- * would protect against stack overflows if the number of nested
- * encodings is high.
- * The OCTET STRING, BIT STRING and ANY BER decoders are heap-based,
- * and are safe from this kind of overflow.
- * A value from getrlimit(RLIMIT_STACK) may be used to initialize
- * this variable. Be careful in multithreaded environments, as the
- * stack size is rather limited.
- */
- size_t max_stack_size; /* 0 disables stack bounds checking */
- } asn_codec_ctx_t;
-
- /*
- * Type of the return value of the encoding functions (der_encode, xer_encode).
- */
- typedef struct asn_enc_rval_s {
- /*
- * Number of bytes encoded.
- * -1 indicates failure to encode the structure.
- * In this case, the members below this one are meaningful.
- */
- ssize_t encoded;
-
- /*
- * Members meaningful when (encoded == -1), for post mortem analysis.
- */
-
- /* Type which cannot be encoded */
- struct asn_TYPE_descriptor_s *failed_type;
-
- /* Pointer to the structure of that type */
- void *structure_ptr;
- } asn_enc_rval_t;
-#define _ASN_ENCODE_FAILED do { \
- asn_enc_rval_t tmp_error; \
- tmp_error.encoded = -1; \
- tmp_error.failed_type = td; \
- tmp_error.structure_ptr = sptr; \
- ASN_DEBUG("Failed to encode element %s", td->name); \
- return tmp_error; \
-} while(0)
-#define _ASN_ENCODED_OK(rval) do { \
- rval.structure_ptr = 0; \
- rval.failed_type = 0; \
- return rval; \
-} while(0)
-
- /*
- * Type of the return value of the decoding functions (ber_decode, xer_decode)
- *
- * Please note that the number of consumed bytes is ALWAYS meaningful,
- * even if code==RC_FAIL. This is to indicate the number of successfully
- * decoded bytes, hence providing a possibility to fail with more diagnostics
- * (i.e., print the offending remainder of the buffer).
- */
- enum asn_dec_rval_code_e {
- RC_OK, /* Decoded successfully */
- RC_WMORE, /* More data expected, call again */
- RC_FAIL /* Failure to decode data */
- };
- typedef struct asn_dec_rval_s {
- enum asn_dec_rval_code_e code; /* Result code */
- size_t consumed; /* Number of bytes consumed */
- } asn_dec_rval_t;
-#define _ASN_DECODE_FAILED do { \
- asn_dec_rval_t tmp_error; \
- tmp_error.code = RC_FAIL; \
- tmp_error.consumed = 0; \
- ASN_DEBUG("Failed to decode element %s", td->name); \
- return tmp_error; \
-} while(0)
-#define _ASN_DECODE_STARVED do { \
- asn_dec_rval_t tmp_error; \
- tmp_error.code = RC_WMORE; \
- tmp_error.consumed = 0; \
- return tmp_error; \
-} while(0)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _ASN_CODECS_H_ */
diff --git a/src/third_party/asn1/asn_codecs_prim.c b/src/third_party/asn1/asn_codecs_prim.c
deleted file mode 100644
index 3d1aa1d8..00000000
--- a/src/third_party/asn1/asn_codecs_prim.c
+++ /dev/null
@@ -1,295 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#include
-#include
-#include
-
-/*
- * Decode an always-primitive type.
- */
-asn_dec_rval_t
-ber_decode_primitive(asn_codec_ctx_t *opt_codec_ctx,
- asn_TYPE_descriptor_t *td,
- void **sptr, const void *buf_ptr, size_t size, int tag_mode) {
- ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr;
- asn_dec_rval_t rval;
- ber_tlv_len_t length;
-
- /*
- * If the structure is not there, allocate it.
- */
- if(st == NULL) {
- st = (ASN__PRIMITIVE_TYPE_t *)CALLOC(1, sizeof(*st));
- if(st == NULL) _ASN_DECODE_FAILED;
- *sptr = (void *)st;
- }
-
- ASN_DEBUG("Decoding %s as plain primitive (tm=%d)",
- td->name, tag_mode);
-
- /*
- * Check tags and extract value length.
- */
- rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size,
- tag_mode, 0, &length, 0);
- if(rval.code != RC_OK)
- return rval;
-
- ASN_DEBUG("%s length is %d bytes", td->name, (int)length);
-
- /*
- * Make sure we have this length.
- */
- buf_ptr = ((const char *)buf_ptr) + rval.consumed;
- size -= rval.consumed;
- if(length > (ber_tlv_len_t)size) {
- rval.code = RC_WMORE;
- rval.consumed = 0;
- return rval;
- }
-
- st->size = (int)length;
- /* The following better be optimized away. */
- if(sizeof(st->size) != sizeof(length)
- && (ber_tlv_len_t)st->size != length) {
- st->size = 0;
- _ASN_DECODE_FAILED;
- }
-
- st->buf = (uint8_t *)MALLOC(length + 1);
- if(!st->buf) {
- st->size = 0;
- _ASN_DECODE_FAILED;
- }
-
- memcpy(st->buf, buf_ptr, length);
- st->buf[length] = '\0'; /* Just in case */
-
- rval.code = RC_OK;
- rval.consumed += length;
-
- ASN_DEBUG("Took %ld/%ld bytes to encode %s",
- (long)rval.consumed,
- (long)length, td->name);
-
- return rval;
-}
-
-/*
- * Encode an always-primitive type using DER.
- */
-asn_enc_rval_t
-der_encode_primitive(asn_TYPE_descriptor_t *td, void *sptr,
- int tag_mode, ber_tlv_tag_t tag,
- asn_app_consume_bytes_f *cb, void *app_key) {
- asn_enc_rval_t erval;
- ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr;
-
- ASN_DEBUG("%s %s as a primitive type (tm=%d)",
- cb?"Encoding":"Estimating", td->name, tag_mode);
-
- erval.encoded = der_write_tags(td, st->size, tag_mode, 0, tag,
- cb, app_key);
- ASN_DEBUG("%s wrote tags %d", td->name, (int)erval.encoded);
- if(erval.encoded == -1) {
- erval.failed_type = td;
- erval.structure_ptr = sptr;
- return erval;
- }
-
- if(cb && st->buf) {
- if(cb(st->buf, st->size, app_key) < 0) {
- erval.encoded = -1;
- erval.failed_type = td;
- erval.structure_ptr = sptr;
- return erval;
- }
- } else {
- assert(st->buf || st->size == 0);
- }
-
- erval.encoded += st->size;
- _ASN_ENCODED_OK(erval);
-}
-
-void
-ASN__PRIMITIVE_TYPE_free(asn_TYPE_descriptor_t *td, void *sptr,
- int contents_only) {
- ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr;
-
- if(!td || !sptr)
- return;
-
- ASN_DEBUG("Freeing %s as a primitive type", td->name);
-
- if(st->buf)
- FREEMEM(st->buf);
-
- if(!contents_only)
- FREEMEM(st);
-}
-
-
-/*
- * Local internal type passed around as an argument.
- */
-struct xdp_arg_s {
- asn_TYPE_descriptor_t *type_descriptor;
- void *struct_key;
- xer_primitive_body_decoder_f *prim_body_decoder;
- int decoded_something;
- int want_more;
-};
-
-
-static int
-xer_decode__unexpected_tag(void *key, const void *chunk_buf, size_t chunk_size) {
- struct xdp_arg_s *arg = (struct xdp_arg_s *)key;
- enum xer_pbd_rval bret;
-
- if(arg->decoded_something) {
- if(xer_is_whitespace(chunk_buf, chunk_size))
- return 0; /* Skip it. */
- /*
- * Decoding was done once already. Prohibit doing it again.
- */
- return -1;
- }
-
- bret = arg->prim_body_decoder(arg->type_descriptor,
- arg->struct_key, chunk_buf, chunk_size);
- switch(bret) {
- case XPBD_SYSTEM_FAILURE:
- case XPBD_DECODER_LIMIT:
- case XPBD_BROKEN_ENCODING:
- break;
- case XPBD_BODY_CONSUMED:
- /* Tag decoded successfully */
- arg->decoded_something = 1;
- /* Fall through */
- case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */
- return 0;
- }
-
- return -1;
-}
-
-static ssize_t
-xer_decode__body(void *key, const void *chunk_buf, size_t chunk_size, int have_more) {
- struct xdp_arg_s *arg = (struct xdp_arg_s *)key;
- enum xer_pbd_rval bret;
-
- if(arg->decoded_something) {
- if(xer_is_whitespace(chunk_buf, chunk_size))
- return chunk_size;
- /*
- * Decoding was done once already. Prohibit doing it again.
- */
- return -1;
- }
-
- if(!have_more) {
- /*
- * If we've received something like "1", we can't really
- * tell whether it is really `1` or `123`, until we know
- * that there is no more data coming.
- * The have_more argument will be set to 1 once something
- * like this is available to the caller of this callback:
- * "1want_more = 1;
- return -1;
- }
-
- bret = arg->prim_body_decoder(arg->type_descriptor,
- arg->struct_key, chunk_buf, chunk_size);
- switch(bret) {
- case XPBD_SYSTEM_FAILURE:
- case XPBD_DECODER_LIMIT:
- case XPBD_BROKEN_ENCODING:
- break;
- case XPBD_BODY_CONSUMED:
- /* Tag decoded successfully */
- arg->decoded_something = 1;
- /* Fall through */
- case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */
- return chunk_size;
- }
-
- return -1;
-}
-
-
-asn_dec_rval_t
-xer_decode_primitive(asn_codec_ctx_t *opt_codec_ctx,
- asn_TYPE_descriptor_t *td,
- void **sptr,
- size_t struct_size,
- const char *opt_mname,
- const void *buf_ptr, size_t size,
- xer_primitive_body_decoder_f *prim_body_decoder
- ) {
- const char *xml_tag = opt_mname ? opt_mname : td->xml_tag;
- asn_struct_ctx_t s_ctx;
- struct xdp_arg_s s_arg;
- asn_dec_rval_t rc;
-
- /*
- * Create the structure if does not exist.
- */
- if(!*sptr) {
- *sptr = CALLOC(1, struct_size);
- if(!*sptr) _ASN_DECODE_FAILED;
- }
-
- memset(&s_ctx, 0, sizeof(s_ctx));
- s_arg.type_descriptor = td;
- s_arg.struct_key = *sptr;
- s_arg.prim_body_decoder = prim_body_decoder;
- s_arg.decoded_something = 0;
- s_arg.want_more = 0;
-
- rc = xer_decode_general(opt_codec_ctx, &s_ctx, &s_arg,
- xml_tag, buf_ptr, size,
- xer_decode__unexpected_tag, xer_decode__body);
- switch(rc.code) {
- case RC_OK:
- if(!s_arg.decoded_something) {
- char ch;
- ASN_DEBUG("Primitive body is not recognized, "
- "supplying empty one");
- /*
- * Decoding opportunity has come and gone.
- * Where's the result?
- * Try to feed with empty body, see if it eats it.
- */
- if(prim_body_decoder(s_arg.type_descriptor,
- s_arg.struct_key, &ch, 0)
- != XPBD_BODY_CONSUMED) {
- /*
- * This decoder does not like empty stuff.
- */
- _ASN_DECODE_FAILED;
- }
- }
- break;
- case RC_WMORE:
- /*
- * Redo the whole thing later.
- * We don't have a context to save intermediate parsing state.
- */
- rc.consumed = 0;
- break;
- case RC_FAIL:
- rc.consumed = 0;
- if(s_arg.want_more)
- rc.code = RC_WMORE;
- else
- _ASN_DECODE_FAILED;
- break;
- }
- return rc;
-}
-
diff --git a/src/third_party/asn1/asn_codecs_prim.h b/src/third_party/asn1/asn_codecs_prim.h
deleted file mode 100644
index 58331aaa..00000000
--- a/src/third_party/asn1/asn_codecs_prim.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*-
- * Copyright (c) 2004 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#ifndef ASN_CODECS_PRIM_H
-#define ASN_CODECS_PRIM_H
-
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- typedef struct ASN__PRIMITIVE_TYPE_s {
- uint8_t *buf; /* Buffer with consecutive primitive encoding bytes */
- int size; /* Size of the buffer */
- } ASN__PRIMITIVE_TYPE_t; /* Do not use this type directly! */
-
- asn_struct_free_f ASN__PRIMITIVE_TYPE_free;
- ber_type_decoder_f ber_decode_primitive;
- der_type_encoder_f der_encode_primitive;
-
- /*
- * A callback specification for the xer_decode_primitive() function below.
- */
- enum xer_pbd_rval {
- XPBD_SYSTEM_FAILURE, /* System failure (memory shortage, etc) */
- XPBD_DECODER_LIMIT, /* Hit some decoder limitation or deficiency */
- XPBD_BROKEN_ENCODING, /* Encoding of a primitive body is broken */
- XPBD_NOT_BODY_IGNORE, /* Not a body format, but safe to ignore */
- XPBD_BODY_CONSUMED /* Body is recognized and consumed */
- };
- typedef enum xer_pbd_rval (xer_primitive_body_decoder_f)
- (asn_TYPE_descriptor_t *td, void *struct_ptr,
- const void *chunk_buf, size_t chunk_size);
-
- /*
- * Specific function to decode simple primitive types.
- * Also see xer_decode_general() in xer_decoder.h
- */
- asn_dec_rval_t xer_decode_primitive(asn_codec_ctx_t *opt_codec_ctx,
- asn_TYPE_descriptor_t *type_descriptor,
- void **struct_ptr, size_t struct_size,
- const char *opt_mname,
- const void *buf_ptr, size_t size,
- xer_primitive_body_decoder_f *prim_body_decoder
- );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ASN_CODECS_PRIM_H */
diff --git a/src/third_party/asn1/asn_internal.h b/src/third_party/asn1/asn_internal.h
deleted file mode 100644
index df58ba2f..00000000
--- a/src/third_party/asn1/asn_internal.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004, 2005, 2007 Lev Walkin .
- * All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-/*
- * Declarations internally useful for the ASN.1 support code.
- */
-#ifndef _ASN_INTERNAL_H_
-#define _ASN_INTERNAL_H_
-
-#include "asn_application.h" /* Application-visible API */
-
-#ifndef __NO_ASSERT_H__ /* Include assert.h only for internal use. */
-#include /* for assert() macro */
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /* Environment version might be used to avoid running with the old library */
-#define ASN1C_ENVIRONMENT_VERSION 923 /* Compile-time version */
- int get_asn1c_environment_version(void); /* Run-time version */
-
-#define CALLOC(nmemb, size) calloc(nmemb, size)
-#define MALLOC(size) malloc(size)
-#define REALLOC(oldptr, size) realloc(oldptr, size)
-#define FREEMEM(ptr) free(ptr)
-
- /*
- * A macro for debugging the ASN.1 internals.
- * You may enable or override it.
- */
-#ifndef ASN_DEBUG /* If debugging code is not defined elsewhere... */
-#if EMIT_ASN_DEBUG == 1 /* And it was asked to emit this code... */
-#ifdef __GNUC__
-#ifdef ASN_THREAD_SAFE
-#define asn_debug_indent 0
-#else /* !ASN_THREAD_SAFE */
- int asn_debug_indent;
-#endif /* ASN_THREAD_SAFE */
-#define ASN_DEBUG(fmt, args...) do { \
- int adi = asn_debug_indent; \
- while(adi--) fprintf(stderr, " "); \
- fprintf(stderr, fmt, ##args); \
- fprintf(stderr, " (%s:%d)\n", \
- __FILE__, __LINE__); \
- } while(0)
-#else /* !__GNUC__ */
- void ASN_DEBUG_f(const char *fmt, ...);
-#define ASN_DEBUG ASN_DEBUG_f
-#endif /* __GNUC__ */
-#else /* EMIT_ASN_DEBUG != 1 */
- static inline void ASN_DEBUG(const char *fmt, ...) {
- (void)fmt;
- }
-#endif /* EMIT_ASN_DEBUG */
-#endif /* ASN_DEBUG */
-
- /*
- * Invoke the application-supplied callback and fail, if something is wrong.
- */
-#define __ASN_E_cbc(buf, size) (cb((buf), (size), app_key) < 0)
-#define _ASN_E_CALLBACK(foo) do { \
- if(foo) goto cb_failed; \
- } while(0)
-#define _ASN_CALLBACK(buf, size) \
- _ASN_E_CALLBACK(__ASN_E_cbc(buf, size))
-#define _ASN_CALLBACK2(buf1, size1, buf2, size2) \
- _ASN_E_CALLBACK(__ASN_E_cbc(buf1, size1) || __ASN_E_cbc(buf2, size2))
-#define _ASN_CALLBACK3(buf1, size1, buf2, size2, buf3, size3) \
- _ASN_E_CALLBACK(__ASN_E_cbc(buf1, size1) \
- || __ASN_E_cbc(buf2, size2) \
- || __ASN_E_cbc(buf3, size3))
-
-#define _i_ASN_TEXT_INDENT(nl, level) do { \
- int __level = (level); \
- int __nl = ((nl) != 0); \
- int __i; \
- if(__nl) _ASN_CALLBACK("\n", 1); \
- if(__level < 0) __level = 0; \
- for(__i = 0; __i < __level; __i++) \
- _ASN_CALLBACK(" ", 4); \
- er.encoded += __nl + 4 * __level; \
-} while(0)
-
-#define _i_INDENT(nl) do { \
- int __i; \
- if((nl) && cb("\n", 1, app_key) < 0) return -1; \
- for(__i = 0; __i < ilevel; __i++) \
- if(cb(" ", 4, app_key) < 0) return -1; \
-} while(0)
-
- /*
- * Check stack against overflow, if limit is set.
- */
-#define _ASN_DEFAULT_STACK_MAX (30000)
- static inline int
- _ASN_STACK_OVERFLOW_CHECK(asn_codec_ctx_t *ctx) {
- if(ctx && ctx->max_stack_size) {
-
- /* ctx MUST be allocated on the stack */
- ptrdiff_t usedstack = ((char *)ctx - (char *)&ctx);
- if(usedstack > 0) usedstack = -usedstack; /* grows up! */
-
- /* double negative required to avoid int wrap-around */
- if(usedstack < -(ptrdiff_t)ctx->max_stack_size) {
- ASN_DEBUG("Stack limit %ld reached",
- (long)ctx->max_stack_size);
- return -1;
- }
- }
- return 0;
- }
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _ASN_INTERNAL_H_ */
diff --git a/src/third_party/asn1/asn_system.h b/src/third_party/asn1/asn_system.h
deleted file mode 100644
index a992230b..00000000
--- a/src/third_party/asn1/asn_system.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004, 2007 Lev Walkin .
- * All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-/*
- * Miscellaneous system-dependent types.
- */
-#ifndef _ASN_SYSTEM_H_
-#define _ASN_SYSTEM_H_
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include /* For snprintf(3) */
-#include /* For *alloc(3) */
-#include /* For memcpy(3) */
-#include /* For size_t */
-#include /* For LONG_MAX */
-#include /* For va_start */
-#include /* for offsetof and ptrdiff_t */
-
-#ifdef _WIN32
-
-#include
-#define snprintf _snprintf
-#define vsnprintf _vsnprintf
-
-/* To avoid linking with ws2_32.lib, here's the definition of ntohl() */
-#define sys_ntohl(l) ((((l) << 24) & 0xff000000) \
- | (((l) << 16) & 0xff0000) \
- | (((l) << 8) & 0xff00) \
- | ((l) & 0xff))
-
-#ifdef _MSC_VER /* MSVS.Net */
-#ifndef __cplusplus
-#define inline __inline
-#endif
-#ifndef ASSUMESTDTYPES /* Standard types have been defined elsewhere */
-#define ssize_t SSIZE_T
-typedef char int8_t;
-typedef short int16_t;
-typedef int int32_t;
-typedef unsigned char uint8_t;
-typedef unsigned short uint16_t;
-typedef unsigned int uint32_t;
-#endif /* ASSUMESTDTYPES */
-#define WIN32_LEAN_AND_MEAN
-#include
-#include
-#define isnan _isnan
-#define finite _finite
-#define copysign _copysign
-#define ilogb _logb
-#else /* !_MSC_VER */
-#include
-#endif /* _MSC_VER */
-
-#else /* !_WIN32 */
-
-#if defined(__vxworks)
-#include
-#else /* !defined(__vxworks) */
-
-#include /* C99 specifies this file */
-/*
- * 1. Earlier FreeBSD version didn't have ,
- * but was present.
- * 2. Sun Solaris requires for alloca(3),
- * but does not have .
- */
-#if (!defined(__FreeBSD__) || !defined(_SYS_INTTYPES_H_))
-#if defined(sun)
-#include /* For alloca(3) */
-#include /* for finite(3) */
-#elif defined(__hpux)
-#ifdef __GNUC__
-#include /* For alloca(3) */
-#else /* !__GNUC__ */
-#define inline
-#endif /* __GNUC__ */
-#else
-#include /* SUSv2+ and C99 specify this file, for uintXX_t */
-#endif /* defined(sun) */
-#endif
-
-#include /* for ntohl() */
-#define sys_ntohl(foo) ntohl(foo)
-
-#endif /* defined(__vxworks) */
-
-#endif /* _WIN32 */
-
-#if __GNUC__ >= 3
-#ifndef GCC_PRINTFLIKE
-#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
-#endif
-#ifndef GCC_NOTUSED
-#define GCC_NOTUSED __attribute__((unused))
-#endif
-#else
-#ifndef GCC_PRINTFLIKE
-#define GCC_PRINTFLIKE(fmt,var) /* nothing */
-#endif
-#ifndef GCC_NOTUSED
-#define GCC_NOTUSED
-#endif
-#endif
-
-/* Figure out if thread safety is requested */
-#if !defined(ASN_THREAD_SAFE) && (defined(THREAD_SAFE) || defined(_REENTRANT))
-#define ASN_THREAD_SAFE
-#endif /* Thread safety */
-
-#ifndef offsetof /* If not defined by */
-#define offsetof(s, m) ((ptrdiff_t)&(((s *)0)->m) - (ptrdiff_t)((s *)0))
-#endif /* offsetof */
-
-#ifndef MIN /* Suitable for comparing primitive types (integers) */
-#if defined(__GNUC__)
-#define MIN(a,b) ({ __typeof a _a = a; __typeof b _b = b; \
- ((_a)<(_b)?(_a):(_b)); })
-#else /* !__GNUC__ */
-#define MIN(a,b) ((a)<(b)?(a):(b)) /* Unsafe variant */
-#endif /* __GNUC__ */
-#endif /* MIN */
-
-#endif /* _ASN_SYSTEM_H_ */
diff --git a/src/third_party/asn1/asntest.c b/src/third_party/asn1/asntest.c
deleted file mode 100755
index 0bb774b0..00000000
--- a/src/third_party/asn1/asntest.c
+++ /dev/null
@@ -1,60 +0,0 @@
-#include
-#include
-
-#include "PokerTHMessage.h"
-
-ssize_t
-simple_serializer(PokerTHMessage_t *msg, unsigned char *buf, size_t size) {
- asn_enc_rval_t er; /* Encoder return value */
- er = der_encode_to_buffer(&asn_DEF_PokerTHMessage, msg, buf, size);
- if(er.encoded == -1) {
- /*
- * Failed to encode the rectangle data.
- */
- fprintf(stderr, "Cannot encode %s\n", er.failed_type->name);
- return -1;
- } else {
- /* Return the number of bytes */
- return er.encoded;
- }
-}
-
-PokerTHMessage_t *
-simple_deserializer(const unsigned char *buf, size_t size) {
- PokerTHMessage_t *msg = 0; /* Note this 0! */
- asn_dec_rval_t rval;
- rval = ber_decode(0, &asn_DEF_PokerTHMessage, (void **)&msg, buf, size);
- if(rval.code == RC_OK) {
- return msg; /* Decoding succeeded */
- } else {
- /* Free partially decoded message */
- ASN_STRUCT_FREE(asn_DEF_PokerTHMessage, msg);
- return 0;
- }
-}
-
-int
-main()
-{
- PokerTHMessage_t *msg;
- unsigned char buf[256];
- ssize_t outSize, i;
- msg = calloc(1, sizeof(PokerTHMessage_t));
- memset(msg, 0, sizeof(PokerTHMessage_t));
- msg->present = PokerTHMessage_PR_initMessage;
- msg->choice.initMessage.requestedVersion.major = 1;
- msg->choice.initMessage.login.present = login_PR_anonymousLogin;
- OCTET_STRING_fromString(&msg->choice.initMessage.login.choice.anonymousLogin.playerName, "Hallo");
- outSize = simple_serializer(msg, buf, sizeof(buf));
- ASN_STRUCT_FREE(asn_DEF_PokerTHMessage, msg);
- for (i = 0; i < outSize; i++)
- printf("%02x ", buf[i]);
- printf("\n");
- msg = simple_deserializer(buf, outSize - 1);
- if (msg)
- printf("error\n");
- msg = simple_deserializer(buf, outSize+1);
- xer_fprint(stdout, &asn_DEF_PokerTHMessage, msg);
- return 0;
-}
-
diff --git a/src/third_party/asn1/ber_decoder.c b/src/third_party/asn1/ber_decoder.c
deleted file mode 100644
index 2eabc6af..00000000
--- a/src/third_party/asn1/ber_decoder.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#include
-
-#undef ADVANCE
-#define ADVANCE(num_bytes) do { \
- size_t num = num_bytes; \
- ptr = ((const char *)ptr) + num; \
- size -= num; \
- consumed_myself += num; \
- } while(0)
-#undef RETURN
-#define RETURN(_code) do { \
- asn_dec_rval_t rval; \
- rval.code = _code; \
- if(opt_ctx) opt_ctx->step = step; /* Save context */ \
- if(_code == RC_OK || opt_ctx) \
- rval.consumed = consumed_myself; \
- else \
- rval.consumed = 0; /* Context-free */ \
- return rval; \
- } while(0)
-
-/*
- * The BER decoder of any type.
- */
-asn_dec_rval_t
-ber_decode(asn_codec_ctx_t *opt_codec_ctx,
- asn_TYPE_descriptor_t *type_descriptor,
- void **struct_ptr, const void *ptr, size_t size) {
- asn_codec_ctx_t s_codec_ctx;
-
- /*
- * Stack checker requires that the codec context
- * must be allocated on the stack.
- */
- if(opt_codec_ctx) {
- if(opt_codec_ctx->max_stack_size) {
- s_codec_ctx = *opt_codec_ctx;
- opt_codec_ctx = &s_codec_ctx;
- }
- } else {
- /* If context is not given, be security-conscious anyway */
- memset(&s_codec_ctx, 0, sizeof(s_codec_ctx));
- s_codec_ctx.max_stack_size = _ASN_DEFAULT_STACK_MAX;
- opt_codec_ctx = &s_codec_ctx;
- }
-
- /*
- * Invoke type-specific decoder.
- */
- return type_descriptor->ber_decoder(opt_codec_ctx, type_descriptor,
- struct_ptr, /* Pointer to the destination structure */
- ptr, size, /* Buffer and its size */
- 0 /* Default tag mode is 0 */
- );
-}
-
-/*
- * Check the set of >> tags matches the definition.
- */
-asn_dec_rval_t
-ber_check_tags(asn_codec_ctx_t *opt_codec_ctx,
- asn_TYPE_descriptor_t *td, asn_struct_ctx_t *opt_ctx,
- const void *ptr, size_t size, int tag_mode, int last_tag_form,
- ber_tlv_len_t *last_length, int *opt_tlv_form) {
- ssize_t consumed_myself = 0;
- ssize_t tag_len;
- ssize_t len_len;
- ber_tlv_tag_t tlv_tag;
- ber_tlv_len_t tlv_len;
- ber_tlv_len_t limit_len = -1;
- int expect_00_terminators = 0;
- int tlv_constr = -1; /* If CHOICE, opt_tlv_form is not given */
- int step = opt_ctx ? opt_ctx->step : 0; /* Where we left previously */
- int tagno;
-
- /*
- * Make sure we didn't exceed the maximum stack size.
- */
- if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx))
- RETURN(RC_FAIL);
-
- /*
- * So what does all this implicit skip stuff mean?
- * Imagine two types,
- * A ::= [5] IMPLICIT T
- * B ::= [2] EXPLICIT T
- * Where T is defined as
- * T ::= [4] IMPLICIT SEQUENCE { ... }
- *
- * Let's say, we are starting to decode type A, given the
- * following TLV stream: <5> <0>. What does this mean?
- * It means that the type A contains type T which is,
- * in turn, empty.
- * Remember though, that we are still in A. We cannot
- * just pass control to the type T decoder. Why? Because
- * the type T decoder expects <4> <0>, not <5> <0>.
- * So, we must make sure we are going to receive <5> while
- * still in A, then pass control to the T decoder, indicating
- * that the tag <4> was implicitly skipped. The decoder of T
- * hence will be prepared to treat <4> as valid tag, and decode
- * it appropriately.
- */
-
- tagno = step /* Continuing where left previously */
- + (tag_mode==1?-1:0)
- ;
- ASN_DEBUG("ber_check_tags(%s, size=%ld, tm=%d, step=%d, tagno=%d)",
- td->name, (long)size, tag_mode, step, tagno);
- /* assert(td->tags_count >= 1) May not be the case for CHOICE or ANY */
-
- if(tag_mode == 0 && tagno == td->tags_count) {
- /*
- * This must be the _untagged_ ANY type,
- * which outermost tag isn't known in advance.
- * Fetch the tag and length separately.
- */
- tag_len = ber_fetch_tag(ptr, size, &tlv_tag);
- switch(tag_len) {
- case -1:
- RETURN(RC_FAIL);
- case 0:
- RETURN(RC_WMORE);
- }
- tlv_constr = BER_TLV_CONSTRUCTED(ptr);
- len_len = ber_fetch_length(tlv_constr,
- (const char *)ptr + tag_len, size - tag_len, &tlv_len);
- switch(len_len) {
- case -1:
- RETURN(RC_FAIL);
- case 0:
- RETURN(RC_WMORE);
- }
- ASN_DEBUG("Advancing %ld in ANY case",
- (long)(tag_len + len_len));
- ADVANCE(tag_len + len_len);
- } else {
- assert(tagno < td->tags_count); /* At least one loop */
- }
- for((void)tagno; tagno < td->tags_count; tagno++, step++) {
-
- /*
- * Fetch and process T from TLV.
- */
- tag_len = ber_fetch_tag(ptr, size, &tlv_tag);
- ASN_DEBUG("Fetching tag from {%p,%ld}: "
- "len %ld, step %d, tagno %d got %s",
- ptr, (long)size,
- (long)tag_len, step, tagno,
- ber_tlv_tag_string(tlv_tag));
- switch(tag_len) {
- case -1:
- RETURN(RC_FAIL);
- case 0:
- RETURN(RC_WMORE);
- }
-
- tlv_constr = BER_TLV_CONSTRUCTED(ptr);
-
- /*
- * If {I}, don't check anything.
- * If {I,B,C}, check B and C unless we're at I.
- */
- if(tag_mode != 0 && step == 0) {
- /*
- * We don't expect tag to match here.
- * It's just because we don't know how the tag
- * is supposed to look like.
- */
- } else {
- assert(tagno >= 0); /* Guaranteed by the code above */
- if(tlv_tag != td->tags[tagno]) {
- /*
- * Unexpected tag. Too bad.
- */
- ASN_DEBUG("Expected: %s, "
- "expectation failed (tn=%d, tm=%d)",
- ber_tlv_tag_string(td->tags[tagno]),
- tagno, tag_mode
- );
- RETURN(RC_FAIL);
- }
- }
-
- /*
- * Attention: if there are more tags expected,
- * ensure that the current tag is presented
- * in constructed form (it contains other tags!).
- * If this one is the last one, check that the tag form
- * matches the one given in descriptor.
- */
- if(tagno < (td->tags_count - 1)) {
- if(tlv_constr == 0) {
- ASN_DEBUG("tlv_constr = %d, expfail",
- tlv_constr);
- RETURN(RC_FAIL);
- }
- } else {
- if(last_tag_form != tlv_constr
- && last_tag_form != -1) {
- ASN_DEBUG("last_tag_form %d != %d",
- last_tag_form, tlv_constr);
- RETURN(RC_FAIL);
- }
- }
-
- /*
- * Fetch and process L from TLV.
- */
- len_len = ber_fetch_length(tlv_constr,
- (const char *)ptr + tag_len, size - tag_len, &tlv_len);
- ASN_DEBUG("Fetchinig len = %ld", (long)len_len);
- switch(len_len) {
- case -1:
- RETURN(RC_FAIL);
- case 0:
- RETURN(RC_WMORE);
- }
-
- /*
- * FIXME
- * As of today, the chain of tags
- * must either contain several indefinite length TLVs,
- * or several definite length ones.
- * No mixing is allowed.
- */
- if(tlv_len == -1) {
- /*
- * Indefinite length.
- */
- if(limit_len == -1) {
- expect_00_terminators++;
- } else {
- ASN_DEBUG("Unexpected indefinite length "
- "in a chain of definite lengths");
- RETURN(RC_FAIL);
- }
- ADVANCE(tag_len + len_len);
- continue;
- } else {
- if(expect_00_terminators) {
- ASN_DEBUG("Unexpected definite length "
- "in a chain of indefinite lengths");
- RETURN(RC_FAIL);
- }
- }
-
- /*
- * Check that multiple TLVs specify ever decreasing length,
- * which is consistent.
- */
- if(limit_len == -1) {
- limit_len = tlv_len + tag_len + len_len;
- if(limit_len < 0) {
- /* Too great tlv_len value? */
- RETURN(RC_FAIL);
- }
- } else if(limit_len != tlv_len + tag_len + len_len) {
- /*
- * Inner TLV specifies length which is inconsistent
- * with the outer TLV's length value.
- */
- ASN_DEBUG("Outer TLV is %ld and inner is %ld",
- (long)limit_len, (long)tlv_len);
- RETURN(RC_FAIL);
- }
-
- ADVANCE(tag_len + len_len);
-
- limit_len -= (tag_len + len_len);
- if((ssize_t)size > limit_len) {
- /*
- * Make sure that we won't consume more bytes
- * from the parent frame than the inferred limit.
- */
- size = limit_len;
- }
- }
-
- if(opt_tlv_form)
- *opt_tlv_form = tlv_constr;
- if(expect_00_terminators)
- *last_length = -expect_00_terminators;
- else
- *last_length = tlv_len;
-
- RETURN(RC_OK);
-}
diff --git a/src/third_party/asn1/ber_decoder.h b/src/third_party/asn1/ber_decoder.h
deleted file mode 100644
index 8012c41e..00000000
--- a/src/third_party/asn1/ber_decoder.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#ifndef _BER_DECODER_H_
-#define _BER_DECODER_H_
-
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- struct asn_TYPE_descriptor_s; /* Forward declaration */
- struct asn_codec_ctx_s; /* Forward declaration */
-
- /*
- * The BER decoder of any type.
- * This function may be invoked directly from the application.
- * The der_encode() function (der_encoder.h) is an opposite to ber_decode().
- */
- asn_dec_rval_t ber_decode(struct asn_codec_ctx_s *opt_codec_ctx,
- struct asn_TYPE_descriptor_s *type_descriptor,
- void **struct_ptr, /* Pointer to a target structure's pointer */
- const void *buffer, /* Data to be decoded */
- size_t size /* Size of that buffer */
- );
-
- /*
- * Type of generic function which decodes the byte stream into the structure.
- */
- typedef asn_dec_rval_t (ber_type_decoder_f)(
- struct asn_codec_ctx_s *opt_codec_ctx,
- struct asn_TYPE_descriptor_s *type_descriptor,
- void **struct_ptr, const void *buf_ptr, size_t size,
- int tag_mode);
-
- /*******************************
- * INTERNALLY USEFUL FUNCTIONS *
- *******************************/
-
- /*
- * Check that all tags correspond to the type definition (as given in head).
- * On return, last_length would contain either a non-negative length of the
- * value part of the last TLV, or the negative number of expected
- * "end of content" sequences. The number may only be negative if the
- * head->last_tag_form is non-zero.
- */
- asn_dec_rval_t ber_check_tags(
- struct asn_codec_ctx_s *opt_codec_ctx, /* codec options */
- struct asn_TYPE_descriptor_s *type_descriptor,
- asn_struct_ctx_t *opt_ctx, /* saved decoding context */
- const void *ptr, size_t size,
- int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */
- int last_tag_form, /* {-1,0:1}: any, primitive, constr */
- ber_tlv_len_t *last_length,
- int *opt_tlv_form /* optional tag form */
- );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _BER_DECODER_H_ */
diff --git a/src/third_party/asn1/ber_tlv_length.c b/src/third_party/asn1/ber_tlv_length.c
deleted file mode 100644
index b49e5dbc..00000000
--- a/src/third_party/asn1/ber_tlv_length.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#include
-#include
-#include
-
-ssize_t
-ber_fetch_length(int _is_constructed, const void *bufptr, size_t size,
- ber_tlv_len_t *len_r) {
- const uint8_t *buf = (const uint8_t *)bufptr;
- unsigned oct;
-
- if(size == 0)
- return 0; /* Want more */
-
- oct = *(const uint8_t *)buf;
- if((oct & 0x80) == 0) {
- /*
- * Short definite length.
- */
- *len_r = oct; /* & 0x7F */
- return 1;
- } else {
- ber_tlv_len_t len;
- size_t skipped;
-
- if(_is_constructed && oct == 0x80) {
- *len_r = -1; /* Indefinite length */
- return 1;
- }
-
- if(oct == 0xff) {
- /* Reserved in standard for future use. */
- return -1;
- }
-
- oct &= 0x7F; /* Leave only the 7 LS bits */
- for(len = 0, buf++, skipped = 1;
- oct && (++skipped <= size); buf++, oct--) {
-
- len = (len << 8) | *buf;
- if(len < 0
- || (len >> ((8 * sizeof(len)) - 8) && oct > 1)) {
- /*
- * Too large length value.
- */
- return -1;
- }
- }
-
- if(oct == 0) {
- ber_tlv_len_t lenplusepsilon = (size_t)len + 1024;
- /*
- * Here length may be very close or equal to 2G.
- * However, the arithmetics used in some decoders
- * may add some (small) quantities to the length,
- * to check the resulting value against some limits.
- * This may result in integer wrap-around, which
- * we try to avoid by checking it earlier here.
- */
- if(lenplusepsilon < 0) {
- /* Too large length value */
- return -1;
- }
-
- *len_r = len;
- return skipped;
- }
-
- return 0; /* Want more */
- }
-
-}
-
-ssize_t
-ber_skip_length(asn_codec_ctx_t *opt_codec_ctx,
- int _is_constructed, const void *ptr, size_t size) {
- ber_tlv_len_t vlen; /* Length of V in TLV */
- ssize_t tl; /* Length of L in TLV */
- ssize_t ll; /* Length of L in TLV */
- size_t skip;
-
- /*
- * Make sure we didn't exceed the maximum stack size.
- */
- if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx))
- return -1;
-
- /*
- * Determine the size of L in TLV.
- */
- ll = ber_fetch_length(_is_constructed, ptr, size, &vlen);
- if(ll <= 0) return ll;
-
- /*
- * Definite length.
- */
- if(vlen >= 0) {
- skip = ll + vlen;
- if(skip > size)
- return 0; /* Want more */
- return skip;
- }
-
- /*
- * Indefinite length!
- */
- ASN_DEBUG("Skipping indefinite length");
- for(skip = ll, ptr = ((const char *)ptr) + ll, size -= ll;;) {
- ber_tlv_tag_t tag;
-
- /* Fetch the tag */
- tl = ber_fetch_tag(ptr, size, &tag);
- if(tl <= 0) return tl;
-
- ll = ber_skip_length(opt_codec_ctx,
- BER_TLV_CONSTRUCTED(ptr),
- ((const char *)ptr) + tl, size - tl);
- if(ll <= 0) return ll;
-
- skip += tl + ll;
-
- /*
- * This may be the end of the indefinite length structure,
- * two consecutive 0 octets.
- * Check if it is true.
- */
- if(((const uint8_t *)ptr)[0] == 0
- && ((const uint8_t *)ptr)[1] == 0)
- return skip;
-
- ptr = ((const char *)ptr) + tl + ll;
- size -= tl + ll;
- }
-
- /* UNREACHABLE */
-}
-
-size_t
-der_tlv_length_serialize(ber_tlv_len_t len, void *bufp, size_t size) {
- size_t required_size; /* Size of len encoding */
- uint8_t *buf = (uint8_t *)bufp;
- uint8_t *end;
- size_t i;
-
- if(len <= 127) {
- /* Encoded in 1 octet */
- if(size) *buf = (uint8_t)len;
- return 1;
- }
-
- /*
- * Compute the size of the subsequent bytes.
- */
- for(required_size = 1, i = 8; i < 8 * sizeof(len); i += 8) {
- if(len >> i)
- required_size++;
- else
- break;
- }
-
- if(size <= required_size)
- return required_size + 1;
-
- *buf++ = (uint8_t)(0x80 | required_size); /* Length of the encoding */
-
- /*
- * Produce the len encoding, space permitting.
- */
- end = buf + required_size;
- for(i -= 8; buf < end; i -= 8, buf++)
- *buf = (uint8_t)(len >> i);
-
- return required_size + 1;
-}
-
diff --git a/src/third_party/asn1/ber_tlv_length.h b/src/third_party/asn1/ber_tlv_length.h
deleted file mode 100644
index 2d1648e8..00000000
--- a/src/third_party/asn1/ber_tlv_length.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*-
- * Copyright (c) 2003 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#ifndef _BER_TLV_LENGTH_H_
-#define _BER_TLV_LENGTH_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- typedef ssize_t ber_tlv_len_t;
-
- /*
- * This function tries to fetch the length of the BER TLV value and place it
- * in *len_r.
- * RETURN VALUES:
- * 0: More data expected than bufptr contains.
- * -1: Fatal error deciphering length.
- * >0: Number of bytes used from bufptr.
- * On return with >0, len_r is constrained as -1..MAX, where -1 mean
- * that the value is of indefinite length.
- */
- ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size,
- ber_tlv_len_t *len_r);
-
- /*
- * This function expects bufptr to be positioned over L in TLV.
- * It returns number of bytes occupied by L and V together, suitable
- * for skipping. The function properly handles indefinite length.
- * RETURN VALUES:
- * Standard {-1,0,>0} convention.
- */
- ssize_t ber_skip_length(
- struct asn_codec_ctx_s *opt_codec_ctx, /* optional context */
- int _is_constructed, const void *bufptr, size_t size);
-
- /*
- * This function serializes the length (L from TLV) in DER format.
- * It always returns number of bytes necessary to represent the length,
- * it is a caller's responsibility to check the return value
- * against the supplied buffer's size.
- */
- size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufptr, size_t size);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _BER_TLV_LENGTH_H_ */
diff --git a/src/third_party/asn1/ber_tlv_tag.c b/src/third_party/asn1/ber_tlv_tag.c
deleted file mode 100644
index 2ddcb161..00000000
--- a/src/third_party/asn1/ber_tlv_tag.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#include
-#include
-#include
-
-ssize_t
-ber_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) {
- ber_tlv_tag_t val;
- ber_tlv_tag_t tclass;
- size_t skipped;
-
- if(size == 0)
- return 0;
-
- val = *(const uint8_t *)ptr;
- tclass = (val >> 6);
- if((val &= 0x1F) != 0x1F) {
- /*
- * Simple form: everything encoded in a single octet.
- * Tag Class is encoded using two least significant bits.
- */
- *tag_r = (val << 2) | tclass;
- return 1;
- }
-
- /*
- * Each octet contains 7 bits of useful information.
- * The MSB is 0 if it is the last octet of the tag.
- */
- for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2;
- skipped <= size;
- ptr = ((const char *)ptr) + 1, skipped++) {
- unsigned int oct = *(const uint8_t *)ptr;
- if(oct & 0x80) {
- val = (val << 7) | (oct & 0x7F);
- /*
- * Make sure there are at least 9 bits spare
- * at the MS side of a value.
- */
- if(val >> ((8 * sizeof(val)) - 9)) {
- /*
- * We would not be able to accomodate
- * any more tag bits.
- */
- return -1;
- }
- } else {
- val = (val << 7) | oct;
- *tag_r = (val << 2) | tclass;
- return skipped;
- }
- }
-
- return 0; /* Want more */
-}
-
-
-ssize_t
-ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *f) {
- char buf[sizeof("[APPLICATION ]") + 32];
- ssize_t ret;
-
- ret = ber_tlv_tag_snprint(tag, buf, sizeof(buf));
- if(ret >= (ssize_t)sizeof(buf) || ret < 2) {
- errno = EPERM;
- return -1;
- }
-
- return fwrite(buf, 1, ret, f);
-}
-
-ssize_t
-ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t size) {
- char *type = 0;
- int ret;
-
- switch(tag & 0x3) {
- case ASN_TAG_CLASS_UNIVERSAL:
- type = "UNIVERSAL ";
- break;
- case ASN_TAG_CLASS_APPLICATION:
- type = "APPLICATION ";
- break;
- case ASN_TAG_CLASS_CONTEXT:
- type = "";
- break;
- case ASN_TAG_CLASS_PRIVATE:
- type = "PRIVATE ";
- break;
- }
-
- ret = snprintf(buf, size, "[%s%u]", type, ((unsigned)tag) >> 2);
- if(ret <= 0 && size) buf[0] = '\0'; /* against broken libc's */
-
- return ret;
-}
-
-char *
-ber_tlv_tag_string(ber_tlv_tag_t tag) {
- static char buf[sizeof("[APPLICATION ]") + 32];
-
- (void)ber_tlv_tag_snprint(tag, buf, sizeof(buf));
-
- return buf;
-}
-
-
-size_t
-ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufp, size_t size) {
- int tclass = BER_TAG_CLASS(tag);
- ber_tlv_tag_t tval = BER_TAG_VALUE(tag);
- uint8_t *buf = (uint8_t *)bufp;
- uint8_t *end;
- size_t required_size;
- size_t i;
-
- if(tval <= 30) {
- /* Encoded in 1 octet */
- if(size) buf[0] = (tclass << 6) | tval;
- return 1;
- } else if(size) {
- *buf++ = (tclass << 6) | 0x1F;
- size--;
- }
-
- /*
- * Compute the size of the subsequent bytes.
- */
- for(required_size = 1, i = 7; i < 8 * sizeof(tval); i += 7) {
- if(tval >> i)
- required_size++;
- else
- break;
- }
-
- if(size < required_size)
- return required_size + 1;
-
- /*
- * Fill in the buffer, space permitting.
- */
- end = buf + required_size - 1;
- for(i -= 7; buf < end; i -= 7, buf++)
- *buf = 0x80 | ((tval >> i) & 0x7F);
- *buf = (tval & 0x7F); /* Last octet without high bit */
-
- return required_size + 1;
-}
-
diff --git a/src/third_party/asn1/ber_tlv_tag.h b/src/third_party/asn1/ber_tlv_tag.h
deleted file mode 100644
index 443dde52..00000000
--- a/src/third_party/asn1/ber_tlv_tag.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#ifndef _BER_TLV_TAG_H_
-#define _BER_TLV_TAG_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- enum asn_tag_class {
- ASN_TAG_CLASS_UNIVERSAL = 0, /* 0b00 */
- ASN_TAG_CLASS_APPLICATION = 1, /* 0b01 */
- ASN_TAG_CLASS_CONTEXT = 2, /* 0b10 */
- ASN_TAG_CLASS_PRIVATE = 3 /* 0b11 */
- };
- typedef unsigned ber_tlv_tag_t; /* BER TAG from Tag-Length-Value */
-
- /*
- * Tag class is encoded together with tag value for optimization purposes.
- */
-#define BER_TAG_CLASS(tag) ((tag) & 0x3)
-#define BER_TAG_VALUE(tag) ((tag) >> 2)
-#define BER_TLV_CONSTRUCTED(tagptr) (((*(const uint8_t *)tagptr)&0x20)?1:0)
-
-#define BER_TAGS_EQUAL(tag1, tag2) ((tag1) == (tag2))
-
- /*
- * Several functions for printing the TAG in the canonical form
- * (i.e. "[PRIVATE 0]").
- * Return values correspond to their libc counterparts (if any).
- */
- ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t buflen);
- ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *);
- char *ber_tlv_tag_string(ber_tlv_tag_t tag);
-
-
- /*
- * This function tries to fetch the tag from the input stream.
- * RETURN VALUES:
- * 0: More data expected than bufptr contains.
- * -1: Fatal error deciphering tag.
- * >0: Number of bytes used from bufptr. tag_r will contain the tag.
- */
- ssize_t ber_fetch_tag(const void *bufptr, size_t size, ber_tlv_tag_t *tag_r);
-
- /*
- * This function serializes the tag (T from TLV) in BER format.
- * It always returns number of bytes necessary to represent the tag,
- * it is a caller's responsibility to check the return value
- * against the supplied buffer's size.
- */
- size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufptr, size_t size);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _BER_TLV_TAG_H_ */
diff --git a/src/third_party/asn1/constr_CHOICE.c b/src/third_party/asn1/constr_CHOICE.c
deleted file mode 100644
index df4641e9..00000000
--- a/src/third_party/asn1/constr_CHOICE.c
+++ /dev/null
@@ -1,1132 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 2005, 2006, 2007 Lev Walkin .
- * All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#include
-#include
-#include
-
-/*
- * Number of bytes left for this structure.
- * (ctx->left) indicates the number of bytes _transferred_ for the structure.
- * (size) contains the number of bytes in the buffer passed.
- */
-#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left)
-
-/*
- * If the subprocessor function returns with an indication that it wants
- * more data, it may well be a fatal decoding problem, because the
- * size is constrained by the 's L, even if the buffer size allows
- * reading more data.
- * For example, consider the buffer containing the following TLVs:
- * ...
- * The TLV length clearly indicates that one byte is expected in V, but
- * if the V processor returns with "want more data" even if the buffer
- * contains way more data than the V processor have seen.
- */
-#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size)
-
-/*
- * This macro "eats" the part of the buffer which is definitely "consumed",
- * i.e. was correctly converted into local representation or rightfully skipped.
- */
-#undef ADVANCE
-#define ADVANCE(num_bytes) do { \
- size_t num = num_bytes; \
- ptr = ((const char *)ptr) + num;\
- size -= num; \
- if(ctx->left >= 0) \
- ctx->left -= num; \
- consumed_myself += num; \
- } while(0)
-
-/*
- * Switch to the next phase of parsing.
- */
-#undef NEXT_PHASE
-#define NEXT_PHASE(ctx) do { \
- ctx->phase++; \
- ctx->step = 0; \
- } while(0)
-
-/*
- * Return a standardized complex structure.
- */
-#undef RETURN
-#define RETURN(_code) do { \
- rval.code = _code; \
- rval.consumed = consumed_myself;\
- return rval; \
- } while(0)
-
-/*
- * See the definitions.
- */
-static int _fetch_present_idx(const void *struct_ptr, int off, int size);
-static void _set_present_idx(void *sptr, int offset, int size, int pres);
-
-/*
- * Tags are canonically sorted in the tag to member table.
- */
-static int
-_search4tag(const void *ap, const void *bp) {
- const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap;
- const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp;
-
- int a_class = BER_TAG_CLASS(a->el_tag);
- int b_class = BER_TAG_CLASS(b->el_tag);
-
- if(a_class == b_class) {
- ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag);
- ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag);
-
- if(a_value == b_value)
- return 0;
- else if(a_value < b_value)
- return -1;
- else
- return 1;
- } else if(a_class < b_class) {
- return -1;
- } else {
- return 1;
- }
-}
-
-/*
- * The decoder of the CHOICE type.
- */
-asn_dec_rval_t
-CHOICE_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- void **struct_ptr, const void *ptr, size_t size, int tag_mode) {
- /*
- * Bring closer parts of structure description.
- */
- asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics;
- asn_TYPE_member_t *elements = td->elements;
-
- /*
- * Parts of the structure being constructed.
- */
- void *st = *struct_ptr; /* Target structure. */
- asn_struct_ctx_t *ctx; /* Decoder context */
-
- ber_tlv_tag_t tlv_tag; /* T from TLV */
- ssize_t tag_len; /* Length of TLV's T */
- asn_dec_rval_t rval; /* Return code from subparsers */
-
- ssize_t consumed_myself = 0; /* Consumed bytes from ptr */
-
- ASN_DEBUG("Decoding %s as CHOICE", td->name);
-
- /*
- * Create the target structure if it is not present already.
- */
- if(st == 0) {
- st = *struct_ptr = CALLOC(1, specs->struct_size);
- if(st == 0) {
- RETURN(RC_FAIL);
- }
- }
-
- /*
- * Restore parsing context.
- */
- ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
-
- /*
- * Start to parse where left previously
- */
- switch(ctx->phase) {
- case 0:
- /*
- * PHASE 0.
- * Check that the set of tags associated with given structure
- * perfectly fits our expectations.
- */
-
- if(tag_mode || td->tags_count) {
- rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size,
- tag_mode, -1, &ctx->left, 0);
- if(rval.code != RC_OK) {
- ASN_DEBUG("%s tagging check failed: %d",
- td->name, rval.code);
- return rval;
- }
-
- if(ctx->left >= 0) {
- /* ?Substracted below! */
- ctx->left += rval.consumed;
- }
- ADVANCE(rval.consumed);
- } else {
- ctx->left = -1;
- }
-
- NEXT_PHASE(ctx);
-
- ASN_DEBUG("Structure consumes %ld bytes, buffer %ld",
- (long)ctx->left, (long)size);
-
- /* Fall through */
- case 1:
- /*
- * Fetch the T from TLV.
- */
- tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag);
- ASN_DEBUG("In %s CHOICE tag length %d", td->name, (int)tag_len);
- switch(tag_len) {
- case 0:
- if(!SIZE_VIOLATION) RETURN(RC_WMORE);
- /* Fall through */
- case -1:
- RETURN(RC_FAIL);
- }
-
- do {
- asn_TYPE_tag2member_t *t2m;
- asn_TYPE_tag2member_t key;
-
- key.el_tag = tlv_tag;
- t2m = (asn_TYPE_tag2member_t *)bsearch(&key,
- specs->tag2el, specs->tag2el_count,
- sizeof(specs->tag2el[0]), _search4tag);
- if(t2m) {
- /*
- * Found the element corresponding to the tag.
- */
- NEXT_PHASE(ctx);
- ctx->step = t2m->el_no;
- break;
- } else if(specs->ext_start == -1) {
- ASN_DEBUG("Unexpected tag %s "
- "in non-extensible CHOICE %s",
- ber_tlv_tag_string(tlv_tag), td->name);
- RETURN(RC_FAIL);
- } else {
- /* Skip this tag */
- ssize_t skip;
-
- ASN_DEBUG("Skipping unknown tag %s",
- ber_tlv_tag_string(tlv_tag));
-
- skip = ber_skip_length(opt_codec_ctx,
- BER_TLV_CONSTRUCTED(ptr),
- (const char *)ptr + tag_len,
- LEFT - tag_len);
-
- switch(skip) {
- case 0:
- if(!SIZE_VIOLATION) RETURN(RC_WMORE);
- /* Fall through */
- case -1:
- RETURN(RC_FAIL);
- }
-
- ADVANCE(skip + tag_len);
- RETURN(RC_OK);
- }
- } while(0);
-
- case 2:
- /*
- * PHASE 2.
- * Read in the element.
- */
- do {
- asn_TYPE_member_t *elm;/* CHOICE's element */
- void *memb_ptr; /* Pointer to the member */
- void **memb_ptr2; /* Pointer to that pointer */
-
- elm = &elements[ctx->step];
-
- /*
- * Compute the position of the member inside a structure,
- * and also a type of containment (it may be contained
- * as pointer or using inline inclusion).
- */
- if(elm->flags & ATF_POINTER) {
- /* Member is a pointer to another structure */
- memb_ptr2 = (void **)((char *)st + elm->memb_offset);
- } else {
- /*
- * A pointer to a pointer
- * holding the start of the structure
- */
- memb_ptr = (char *)st + elm->memb_offset;
- memb_ptr2 = &memb_ptr;
- }
- /* Set presence to be able to free it properly at any time */
- _set_present_idx(st, specs->pres_offset,
- specs->pres_size, ctx->step + 1);
- /*
- * Invoke the member fetch routine according to member's type
- */
- rval = elm->type->ber_decoder(opt_codec_ctx, elm->type,
- memb_ptr2, ptr, LEFT, elm->tag_mode);
- switch(rval.code) {
- case RC_OK:
- break;
- case RC_WMORE: /* More data expected */
- if(!SIZE_VIOLATION) {
- ADVANCE(rval.consumed);
- RETURN(RC_WMORE);
- }
- RETURN(RC_FAIL);
- case RC_FAIL: /* Fatal error */
- RETURN(rval.code);
- } /* switch(rval) */
-
- ADVANCE(rval.consumed);
- } while(0);
-
- NEXT_PHASE(ctx);
-
- /* Fall through */
- case 3:
- ASN_DEBUG("CHOICE %s Leftover: %ld, size = %ld, tm=%d, tc=%d",
- td->name, (long)ctx->left, (long)size,
- tag_mode, td->tags_count);
-
- if(ctx->left > 0) {
- /*
- * The type must be fully decoded
- * by the CHOICE member-specific decoder.
- */
- RETURN(RC_FAIL);
- }
-
- if(ctx->left == -1
- && !(tag_mode || td->tags_count)) {
- /*
- * This is an untagged CHOICE.
- * It doesn't contain nothing
- * except for the member itself, including all its tags.
- * The decoding is completed.
- */
- NEXT_PHASE(ctx);
- break;
- }
-
- /*
- * Read in the "end of data chunks"'s.
- */
- while(ctx->left < 0) {
- ssize_t tl;
-
- tl = ber_fetch_tag(ptr, LEFT, &tlv_tag);
- switch(tl) {
- case 0:
- if(!SIZE_VIOLATION) RETURN(RC_WMORE);
- /* Fall through */
- case -1:
- RETURN(RC_FAIL);
- }
-
- /*
- * Expected <0><0>...
- */
- if(((const uint8_t *)ptr)[0] == 0) {
- if(LEFT < 2) {
- if(SIZE_VIOLATION)
- RETURN(RC_FAIL);
- else
- RETURN(RC_WMORE);
- } else if(((const uint8_t *)ptr)[1] == 0) {
- /*
- * Correctly finished with <0><0>.
- */
- ADVANCE(2);
- ctx->left++;
- continue;
- }
- } else {
- ASN_DEBUG("Unexpected continuation in %s",
- td->name);
- RETURN(RC_FAIL);
- }
-
- /* UNREACHABLE */
- }
-
- NEXT_PHASE(ctx);
- case 4:
- /* No meaningful work here */
- break;
- }
-
- RETURN(RC_OK);
-}
-
-asn_enc_rval_t
-CHOICE_encode_der(asn_TYPE_descriptor_t *td, void *sptr,
- int tag_mode, ber_tlv_tag_t tag,
- asn_app_consume_bytes_f *cb, void *app_key) {
- asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics;
- asn_TYPE_member_t *elm; /* CHOICE element */
- asn_enc_rval_t erval;
- void *memb_ptr;
- size_t computed_size = 0;
- int present;
-
- if(!sptr) _ASN_ENCODE_FAILED;
-
- ASN_DEBUG("%s %s as CHOICE",
- cb?"Encoding":"Estimating", td->name);
-
- present = _fetch_present_idx(sptr,
- specs->pres_offset, specs->pres_size);
-
- /*
- * If the structure was not initialized, it cannot be encoded:
- * can't deduce what to encode in the choice type.
- */
- if(present <= 0 || present > td->elements_count) {
- if(present == 0 && td->elements_count == 0) {
- /* The CHOICE is empty?! */
- erval.encoded = 0;
- _ASN_ENCODED_OK(erval);
- }
- _ASN_ENCODE_FAILED;
- }
-
- /*
- * Seek over the present member of the structure.
- */
- elm = &td->elements[present-1];
- if(elm->flags & ATF_POINTER) {
- memb_ptr = *(void **)((char *)sptr + elm->memb_offset);
- if(memb_ptr == 0) {
- if(elm->optional) {
- erval.encoded = 0;
- _ASN_ENCODED_OK(erval);
- }
- /* Mandatory element absent */
- _ASN_ENCODE_FAILED;
- }
- } else {
- memb_ptr = (void *)((char *)sptr + elm->memb_offset);
- }
-
- /*
- * If the CHOICE itself is tagged EXPLICIT:
- * T ::= [2] EXPLICIT CHOICE { ... }
- * Then emit the appropriate tags.
- */
- if(tag_mode == 1 || td->tags_count) {
- /*
- * For this, we need to pre-compute the member.
- */
- ssize_t ret;
-
- /* Encode member with its tag */
- erval = elm->type->der_encoder(elm->type, memb_ptr,
- elm->tag_mode, elm->tag, 0, 0);
- if(erval.encoded == -1)
- return erval;
-
- /* Encode CHOICE with parent or my own tag */
- ret = der_write_tags(td, erval.encoded, tag_mode, 1, tag,
- cb, app_key);
- if(ret == -1)
- _ASN_ENCODE_FAILED;
- computed_size += ret;
- }
-
- /*
- * Encode the single underlying member.
- */
- erval = elm->type->der_encoder(elm->type, memb_ptr,
- elm->tag_mode, elm->tag, cb, app_key);
- if(erval.encoded == -1)
- return erval;
-
- ASN_DEBUG("Encoded CHOICE member in %ld bytes (+%ld)",
- (long)erval.encoded, (long)computed_size);
-
- erval.encoded += computed_size;
-
- return erval;
-}
-
-ber_tlv_tag_t
-CHOICE_outmost_tag(asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, ber_tlv_tag_t tag) {
- asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics;
- int present;
-
- assert(tag_mode == 0);
- (void)tag_mode;
- assert(tag == 0);
- (void)tag;
-
- /*
- * Figure out which CHOICE element is encoded.
- */
- present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size);
-
- if(present > 0 || present <= td->elements_count) {
- asn_TYPE_member_t *elm = &td->elements[present-1];
- const void *memb_ptr;
-
- if(elm->flags & ATF_POINTER) {
- memb_ptr = *(const void * const *)
- ((const char *)ptr + elm->memb_offset);
- } else {
- memb_ptr = (const void *)
- ((const char *)ptr + elm->memb_offset);
- }
-
- return asn_TYPE_outmost_tag(elm->type, memb_ptr,
- elm->tag_mode, elm->tag);
- } else {
- return (ber_tlv_tag_t)-1;
- }
-}
-
-int
-CHOICE_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics;
- int present;
-
- if(!sptr) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- /*
- * Figure out which CHOICE element is encoded.
- */
- present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size);
- if(present > 0 && present <= td->elements_count) {
- asn_TYPE_member_t *elm = &td->elements[present-1];
- const void *memb_ptr;
-
- if(elm->flags & ATF_POINTER) {
- memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset);
- if(!memb_ptr) {
- if(elm->optional)
- return 0;
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: mandatory CHOICE element %s absent (%s:%d)",
- td->name, elm->name, __FILE__, __LINE__);
- return -1;
- }
- } else {
- memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
- }
-
- if(elm->memb_constraints) {
- return elm->memb_constraints(elm->type, memb_ptr,
- ctfailcb, app_key);
- } else {
- int ret = elm->type->check_constraints(elm->type,
- memb_ptr, ctfailcb, app_key);
- /*
- * Cannot inherit it eralier:
- * need to make sure we get the updated version.
- */
- elm->memb_constraints = elm->type->check_constraints;
- return ret;
- }
- } else {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: no CHOICE element given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-}
-
-#undef XER_ADVANCE
-#define XER_ADVANCE(num_bytes) do { \
- size_t num = num_bytes; \
- buf_ptr = ((const char *)buf_ptr) + num;\
- size -= num; \
- consumed_myself += num; \
- } while(0)
-
-/*
- * Decode the XER (XML) data.
- */
-asn_dec_rval_t
-CHOICE_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- void **struct_ptr, const char *opt_mname,
- const void *buf_ptr, size_t size) {
- /*
- * Bring closer parts of structure description.
- */
- asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics;
- const char *xml_tag = opt_mname ? opt_mname : td->xml_tag;
-
- /*
- * Parts of the structure being constructed.
- */
- void *st = *struct_ptr; /* Target structure. */
- asn_struct_ctx_t *ctx; /* Decoder context */
-
- asn_dec_rval_t rval; /* Return value of a decoder */
- ssize_t consumed_myself = 0; /* Consumed bytes from ptr */
- int edx; /* Element index */
-
- /*
- * Create the target structure if it is not present already.
- */
- if(st == 0) {
- st = *struct_ptr = CALLOC(1, specs->struct_size);
- if(st == 0) RETURN(RC_FAIL);
- }
-
- /*
- * Restore parsing context.
- */
- ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
- if(ctx->phase == 0 && !*xml_tag)
- ctx->phase = 1; /* Skip the outer tag checking phase */
-
- /*
- * Phases of XER/XML processing:
- * Phase 0: Check that the opening tag matches our expectations.
- * Phase 1: Processing body and reacting on closing tag.
- * Phase 2: Processing inner type.
- * Phase 3: Only waiting for closing tag.
- * Phase 4: Skipping unknown extensions.
- * Phase 5: PHASED OUT
- */
- for(edx = ctx->step; ctx->phase <= 4;) {
- pxer_chunk_type_e ch_type; /* XER chunk type */
- ssize_t ch_size; /* Chunk size */
- xer_check_tag_e tcv; /* Tag check value */
- asn_TYPE_member_t *elm;
-
- /*
- * Go inside the member.
- */
- if(ctx->phase == 2) {
- asn_dec_rval_t tmprval;
- void *memb_ptr; /* Pointer to the member */
- void **memb_ptr2; /* Pointer to that pointer */
-
- elm = &td->elements[edx];
-
- if(elm->flags & ATF_POINTER) {
- /* Member is a pointer to another structure */
- memb_ptr2 = (void **)((char *)st
- + elm->memb_offset);
- } else {
- memb_ptr = (char *)st + elm->memb_offset;
- memb_ptr2 = &memb_ptr;
- }
-
- /* Start/Continue decoding the inner member */
- tmprval = elm->type->xer_decoder(opt_codec_ctx,
- elm->type, memb_ptr2, elm->name,
- buf_ptr, size);
- XER_ADVANCE(tmprval.consumed);
- ASN_DEBUG("XER/CHOICE: itdf: [%s] code=%d",
- elm->type->name, tmprval.code);
- if(tmprval.code != RC_OK)
- RETURN(tmprval.code);
- assert(_fetch_present_idx(st,
- specs->pres_offset, specs->pres_size) == 0);
- /* Record what we've got */
- _set_present_idx(st,
- specs->pres_offset, specs->pres_size, edx + 1);
- ctx->phase = 3;
- /* Fall through */
- }
-
- /* No need to wait for closing tag; special mode. */
- if(ctx->phase == 3 && !*xml_tag) {
- ctx->phase = 5; /* Phase out */
- RETURN(RC_OK);
- }
-
- /*
- * Get the next part of the XML stream.
- */
- ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type);
- switch(ch_size) {
- case -1:
- RETURN(RC_FAIL);
- case 0:
- RETURN(RC_WMORE);
- default:
- switch(ch_type) {
- case PXER_COMMENT: /* Got XML comment */
- case PXER_TEXT: /* Ignore free-standing text */
- XER_ADVANCE(ch_size); /* Skip silently */
- continue;
- case PXER_TAG:
- break; /* Check the rest down there */
- }
- }
-
- tcv = xer_check_tag(buf_ptr, ch_size, xml_tag);
- ASN_DEBUG("XER/CHOICE checked [%c%c%c%c] vs [%s], tcv=%d",
- ch_size>0?((const uint8_t *)buf_ptr)[0]:'?',
- ch_size>1?((const uint8_t *)buf_ptr)[1]:'?',
- ch_size>2?((const uint8_t *)buf_ptr)[2]:'?',
- ch_size>3?((const uint8_t *)buf_ptr)[3]:'?',
- xml_tag, tcv);
-
- /* Skip the extensions section */
- if(ctx->phase == 4) {
- ASN_DEBUG("skip_unknown(%d, %ld)",
- tcv, (long)ctx->left);
- switch(xer_skip_unknown(tcv, &ctx->left)) {
- case -1:
- ctx->phase = 5;
- RETURN(RC_FAIL);
- continue;
- case 1:
- ctx->phase = 3;
- /* Fall through */
- case 0:
- XER_ADVANCE(ch_size);
- continue;
- case 2:
- ctx->phase = 3;
- break;
- }
- }
-
- switch(tcv) {
- case XCT_BOTH:
- break; /* No CHOICE? */
- case XCT_CLOSING:
- if(ctx->phase != 3)
- break;
- XER_ADVANCE(ch_size);
- ctx->phase = 5; /* Phase out */
- RETURN(RC_OK);
- case XCT_OPENING:
- if(ctx->phase == 0) {
- XER_ADVANCE(ch_size);
- ctx->phase = 1; /* Processing body phase */
- continue;
- }
- /* Fall through */
- case XCT_UNKNOWN_OP:
- case XCT_UNKNOWN_BO:
-
- if(ctx->phase != 1)
- break; /* Really unexpected */
-
- /*
- * Search which inner member corresponds to this tag.
- */
- for(edx = 0; edx < td->elements_count; edx++) {
- elm = &td->elements[edx];
- tcv = xer_check_tag(buf_ptr,ch_size,elm->name);
- switch(tcv) {
- case XCT_BOTH:
- case XCT_OPENING:
- /*
- * Process this member.
- */
- ctx->step = edx;
- ctx->phase = 2;
- break;
- case XCT_UNKNOWN_OP:
- case XCT_UNKNOWN_BO:
- continue;
- default:
- edx = td->elements_count;
- break; /* Phase out */
- }
- break;
- }
- if(edx != td->elements_count)
- continue;
-
- /* It is expected extension */
- if(specs->ext_start != -1) {
- ASN_DEBUG("Got anticipated extension");
- /*
- * Check for (XCT_BOTH or XCT_UNKNOWN_BO)
- * By using a mask. Only record a pure
- * tags.
- */
- if(tcv & XCT_CLOSING) {
- /* Found without body */
- ctx->phase = 3; /* Terminating */
- } else {
- ctx->left = 1;
- ctx->phase = 4; /* Skip ...'s */
- }
- XER_ADVANCE(ch_size);
- continue;
- }
-
- /* Fall through */
- default:
- break;
- }
-
- ASN_DEBUG("Unexpected XML tag [%c%c%c%c] in CHOICE [%s]"
- " (ph=%d, tag=%s)",
- ch_size>0?((const uint8_t *)buf_ptr)[0]:'?',
- ch_size>1?((const uint8_t *)buf_ptr)[1]:'?',
- ch_size>2?((const uint8_t *)buf_ptr)[2]:'?',
- ch_size>3?((const uint8_t *)buf_ptr)[3]:'?',
- td->name, ctx->phase, xml_tag);
- break;
- }
-
- ctx->phase = 5; /* Phase out, just in case */
- RETURN(RC_FAIL);
-}
-
-
-asn_enc_rval_t
-CHOICE_encode_xer(asn_TYPE_descriptor_t *td, void *sptr,
- int ilevel, enum xer_encoder_flags_e flags,
- asn_app_consume_bytes_f *cb, void *app_key) {
- asn_CHOICE_specifics_t *specs=(asn_CHOICE_specifics_t *)td->specifics;
- asn_enc_rval_t er;
- int present;
-
- if(!sptr)
- _ASN_ENCODE_FAILED;
-
- /*
- * Figure out which CHOICE element is encoded.
- */
- present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size);
-
- if(present <= 0 || present > td->elements_count) {
- _ASN_ENCODE_FAILED;
- } else {
- asn_enc_rval_t tmper;
- asn_TYPE_member_t *elm = &td->elements[present-1];
- void *memb_ptr;
- const char *mname = elm->name;
- unsigned int mlen = strlen(mname);
-
- if(elm->flags & ATF_POINTER) {
- memb_ptr = *(void **)((char *)sptr + elm->memb_offset);
- if(!memb_ptr) _ASN_ENCODE_FAILED;
- } else {
- memb_ptr = (void *)((char *)sptr + elm->memb_offset);
- }
-
- er.encoded = 0;
-
- if(!(flags & XER_F_CANONICAL)) _i_ASN_TEXT_INDENT(1, ilevel);
- _ASN_CALLBACK3("<", 1, mname, mlen, ">", 1);
-
- tmper = elm->type->xer_encoder(elm->type, memb_ptr,
- ilevel + 1, flags, cb, app_key);
- if(tmper.encoded == -1) return tmper;
-
- _ASN_CALLBACK3("", 2, mname, mlen, ">", 1);
-
- er.encoded += 5 + (2 * mlen) + tmper.encoded;
- }
-
- if(!(flags & XER_F_CANONICAL)) _i_ASN_TEXT_INDENT(1, ilevel - 1);
-
- _ASN_ENCODED_OK(er);
-cb_failed:
- _ASN_ENCODE_FAILED;
-}
-
-asn_dec_rval_t
-CHOICE_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
- asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics;
- asn_dec_rval_t rv;
- asn_per_constraint_t *ct;
- asn_TYPE_member_t *elm; /* CHOICE's element */
- void *memb_ptr;
- void **memb_ptr2;
- void *st = *sptr;
- int value;
-
- if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx))
- _ASN_DECODE_FAILED;
-
- /*
- * Create the target structure if it is not present already.
- */
- if(!st) {
- st = *sptr = CALLOC(1, specs->struct_size);
- if(!st) _ASN_DECODE_FAILED;
- }
-
- if(constraints) ct = &constraints->value;
- else if(td->per_constraints) ct = &td->per_constraints->value;
- else ct = 0;
-
- if(ct && ct->flags & APC_EXTENSIBLE) {
- value = per_get_few_bits(pd, 1);
- if(value < 0) _ASN_DECODE_STARVED;
- if(value) ct = 0; /* Not restricted */
- }
-
- if(ct && ct->range_bits >= 0) {
- value = per_get_few_bits(pd, ct->range_bits);
- if(value < 0) _ASN_DECODE_STARVED;
- ASN_DEBUG("CHOICE %s got index %d in range %d",
- td->name, value, ct->range_bits);
- if(value > ct->upper_bound)
- _ASN_DECODE_FAILED;
- } else {
- if(specs->ext_start == -1)
- _ASN_DECODE_FAILED;
- value = uper_get_nsnnwn(pd);
- if(value < 0) _ASN_DECODE_STARVED;
- value += specs->ext_start;
- if(value >= td->elements_count)
- _ASN_DECODE_FAILED;
- }
-
- /* Adjust if canonical order is different from natural order */
- if(specs->canonical_order)
- value = specs->canonical_order[value];
-
- /* Set presence to be able to free it later */
- _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1);
-
- elm = &td->elements[value];
- if(elm->flags & ATF_POINTER) {
- /* Member is a pointer to another structure */
- memb_ptr2 = (void **)((char *)st + elm->memb_offset);
- } else {
- memb_ptr = (char *)st + elm->memb_offset;
- memb_ptr2 = &memb_ptr;
- }
- ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name);
-
- if(ct && ct->range_bits >= 0) {
- rv = elm->type->uper_decoder(opt_codec_ctx, elm->type,
- elm->per_constraints, memb_ptr2, pd);
- } else {
- rv = uper_open_type_get(opt_codec_ctx, elm->type,
- elm->per_constraints, memb_ptr2, pd);
- }
-
- if(rv.code != RC_OK)
- ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d",
- elm->name, td->name, rv.code);
- return rv;
-}
-
-asn_enc_rval_t
-CHOICE_encode_uper(asn_TYPE_descriptor_t *td,
- asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) {
- asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics;
- asn_TYPE_member_t *elm; /* CHOICE's element */
- asn_per_constraint_t *ct;
- void *memb_ptr;
- int present;
-
- if(!sptr) _ASN_ENCODE_FAILED;
-
- ASN_DEBUG("Encoding %s as CHOICE", td->name);
-
- if(constraints) ct = &constraints->value;
- else if(td->per_constraints) ct = &td->per_constraints->value;
- else ct = 0;
-
- present = _fetch_present_idx(sptr,
- specs->pres_offset, specs->pres_size);
-
- /*
- * If the structure was not initialized properly, it cannot be encoded:
- * can't deduce what to encode in the choice type.
- */
- if(present <= 0 || present > td->elements_count)
- _ASN_ENCODE_FAILED;
- else
- present--;
-
- /* Adjust if canonical order is different from natural order */
- if(specs->canonical_order)
- present = specs->canonical_order[present];
-
- ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present);
-
- if(ct && ct->range_bits >= 0) {
- if(present < ct->lower_bound
- || present > ct->upper_bound) {
- if(ct->flags & APC_EXTENSIBLE) {
- if(per_put_few_bits(po, 1, 1))
- _ASN_ENCODE_FAILED;
- } else {
- _ASN_ENCODE_FAILED;
- }
- ct = 0;
- }
- }
- if(ct && ct->flags & APC_EXTENSIBLE)
- if(per_put_few_bits(po, 0, 1))
- _ASN_ENCODE_FAILED;
-
- elm = &td->elements[present];
- if(elm->flags & ATF_POINTER) {
- /* Member is a pointer to another structure */
- memb_ptr = *(void **)((char *)sptr + elm->memb_offset);
- if(!memb_ptr) _ASN_ENCODE_FAILED;
- } else {
- memb_ptr = (char *)sptr + elm->memb_offset;
- }
-
- if(ct && ct->range_bits >= 0) {
- if(per_put_few_bits(po, present, ct->range_bits))
- _ASN_ENCODE_FAILED;
-
- return elm->type->uper_encoder(elm->type, elm->per_constraints,
- memb_ptr, po);
- } else {
- asn_enc_rval_t rval;
- if(specs->ext_start == -1)
- _ASN_ENCODE_FAILED;
- if(uper_put_nsnnwn(po, present - specs->ext_start))
- _ASN_ENCODE_FAILED;
- if(uper_open_type_put(elm->type, elm->per_constraints,
- memb_ptr, po))
- _ASN_ENCODE_FAILED;
- rval.encoded = 0;
- _ASN_ENCODED_OK(rval);
- }
-}
-
-
-int
-CHOICE_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
- asn_app_consume_bytes_f *cb, void *app_key) {
- asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics;
- int present;
-
- if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0;
-
- /*
- * Figure out which CHOICE element is encoded.
- */
- present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size);
-
- /*
- * Print that element.
- */
- if(present > 0 && present <= td->elements_count) {
- asn_TYPE_member_t *elm = &td->elements[present-1];
- const void *memb_ptr;
-
- if(elm->flags & ATF_POINTER) {
- memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset);
- if(!memb_ptr) return (cb("", 8, app_key) < 0) ? -1 : 0;
- } else {
- memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
- }
-
- /* Print member's name and stuff */
- if(0) {
- if(cb(elm->name, strlen(elm->name), app_key) < 0
- || cb(": ", 2, app_key) < 0)
- return -1;
- }
-
- return elm->type->print_struct(elm->type, memb_ptr, ilevel,
- cb, app_key);
- } else {
- return (cb("", 8, app_key) < 0) ? -1 : 0;
- }
-}
-
-void
-CHOICE_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) {
- asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics;
- int present;
-
- if(!td || !ptr)
- return;
-
- ASN_DEBUG("Freeing %s as CHOICE", td->name);
-
- /*
- * Figure out which CHOICE element is encoded.
- */
- present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size);
-
- /*
- * Free that element.
- */
- if(present > 0 && present <= td->elements_count) {
- asn_TYPE_member_t *elm = &td->elements[present-1];
- void *memb_ptr;
-
- if(elm->flags & ATF_POINTER) {
- memb_ptr = *(void **)((char *)ptr + elm->memb_offset);
- if(memb_ptr)
- ASN_STRUCT_FREE(*elm->type, memb_ptr);
- } else {
- memb_ptr = (void *)((char *)ptr + elm->memb_offset);
- ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr);
- }
- }
-
- if(!contents_only) {
- FREEMEM(ptr);
- }
-}
-
-
-/*
- * The following functions functions offer protection against -fshort-enums,
- * compatible with little- and big-endian machines.
- * If assertion is triggered, either disable -fshort-enums, or add an entry
- * here with the ->pres_size of your target stracture.
- * Unless the target structure is packed, the ".present" member
- * is guaranteed to be aligned properly. ASN.1 compiler itself does not
- * produce packed code.
- */
-static int
-_fetch_present_idx(const void *struct_ptr, int pres_offset, int pres_size) {
- const void *present_ptr;
- int present;
-
- present_ptr = ((const char *)struct_ptr) + pres_offset;
-
- switch(pres_size) {
- case sizeof(int):
- present = *(const int *)present_ptr;
- break;
- case sizeof(short):
- present = *(const short *)present_ptr;
- break;
- case sizeof(char):
- present = *(const char *)present_ptr;
- break;
- default:
- /* ANSI C mandates enum to be equivalent to integer */
- assert(pres_size != sizeof(int));
- return 0; /* If not aborted, pass back safe value */
- }
-
- return present;
-}
-
-static void
-_set_present_idx(void *struct_ptr, int pres_offset, int pres_size, int present) {
- void *present_ptr;
- present_ptr = ((char *)struct_ptr) + pres_offset;
-
- switch(pres_size) {
- case sizeof(int):
- *(int *)present_ptr = present;
- break;
- case sizeof(short):
- *(short *)present_ptr = present;
- break;
- case sizeof(char):
- *(char *)present_ptr = present;
- break;
- default:
- /* ANSI C mandates enum to be equivalent to integer */
- assert(pres_size != sizeof(int));
- }
-}
diff --git a/src/third_party/asn1/constr_CHOICE.h b/src/third_party/asn1/constr_CHOICE.h
deleted file mode 100644
index 219b9917..00000000
--- a/src/third_party/asn1/constr_CHOICE.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004, 2005 Lev Walkin .
- * All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#ifndef _CONSTR_CHOICE_H_
-#define _CONSTR_CHOICE_H_
-
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- typedef struct asn_CHOICE_specifics_s {
- /*
- * Target structure description.
- */
- int struct_size; /* Size of the target structure. */
- int ctx_offset; /* Offset of the asn_codec_ctx_t member */
- int pres_offset; /* Identifier of the present member */
- int pres_size; /* Size of the identifier (enum) */
-
- /*
- * Tags to members mapping table.
- */
- asn_TYPE_tag2member_t *tag2el;
- int tag2el_count;
-
- /* Canonical ordering of CHOICE elements, for PER */
- int *canonical_order;
-
- /*
- * Extensions-related stuff.
- */
- int ext_start; /* First member of extensions, or -1 */
- } asn_CHOICE_specifics_t;
-
- /*
- * A set specialized functions dealing with the CHOICE type.
- */
- asn_struct_free_f CHOICE_free;
- asn_struct_print_f CHOICE_print;
- asn_constr_check_f CHOICE_constraint;
- ber_type_decoder_f CHOICE_decode_ber;
- der_type_encoder_f CHOICE_encode_der;
- xer_type_decoder_f CHOICE_decode_xer;
- xer_type_encoder_f CHOICE_encode_xer;
- per_type_decoder_f CHOICE_decode_uper;
- per_type_encoder_f CHOICE_encode_uper;
- asn_outmost_tag_f CHOICE_outmost_tag;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CONSTR_CHOICE_H_ */
diff --git a/src/third_party/asn1/constr_SEQUENCE.c b/src/third_party/asn1/constr_SEQUENCE.c
deleted file mode 100644
index 48a42492..00000000
--- a/src/third_party/asn1/constr_SEQUENCE.c
+++ /dev/null
@@ -1,1435 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004, 2005, 2006, 2007 Lev Walkin .
- * All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#include
-#include
-#include
-
-/*
- * Number of bytes left for this structure.
- * (ctx->left) indicates the number of bytes _transferred_ for the structure.
- * (size) contains the number of bytes in the buffer passed.
- */
-#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left)
-
-/*
- * If the subprocessor function returns with an indication that it wants
- * more data, it may well be a fatal decoding problem, because the
- * size is constrained by the 's L, even if the buffer size allows
- * reading more data.
- * For example, consider the buffer containing the following TLVs:
- * ...
- * The TLV length clearly indicates that one byte is expected in V, but
- * if the V processor returns with "want more data" even if the buffer
- * contains way more data than the V processor have seen.
- */
-#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size)
-
-/*
- * This macro "eats" the part of the buffer which is definitely "consumed",
- * i.e. was correctly converted into local representation or rightfully skipped.
- */
-#undef ADVANCE
-#define ADVANCE(num_bytes) do { \
- size_t num = num_bytes; \
- ptr = ((const char *)ptr) + num;\
- size -= num; \
- if(ctx->left >= 0) \
- ctx->left -= num; \
- consumed_myself += num; \
- } while(0)
-
-/*
- * Switch to the next phase of parsing.
- */
-#undef NEXT_PHASE
-#undef PHASE_OUT
-#define NEXT_PHASE(ctx) do { \
- ctx->phase++; \
- ctx->step = 0; \
- } while(0)
-#define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0)
-
-/*
- * Return a standardized complex structure.
- */
-#undef RETURN
-#define RETURN(_code) do { \
- rval.code = _code; \
- rval.consumed = consumed_myself;\
- return rval; \
- } while(0)
-
-/*
- * Check whether we are inside the extensions group.
- */
-#define IN_EXTENSION_GROUP(specs, memb_idx) \
- ( ((memb_idx) > (specs)->ext_after) \
- &&((memb_idx) < (specs)->ext_before))
-
-
-/*
- * Tags are canonically sorted in the tag2element map.
- */
-static int
-_t2e_cmp(const void *ap, const void *bp) {
- const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap;
- const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp;
-
- int a_class = BER_TAG_CLASS(a->el_tag);
- int b_class = BER_TAG_CLASS(b->el_tag);
-
- if(a_class == b_class) {
- ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag);
- ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag);
-
- if(a_value == b_value) {
- if(a->el_no > b->el_no)
- return 1;
- /*
- * Important: we do not check
- * for a->el_no <= b->el_no!
- */
- return 0;
- } else if(a_value < b_value)
- return -1;
- else
- return 1;
- } else if(a_class < b_class) {
- return -1;
- } else {
- return 1;
- }
-}
-
-
-/*
- * The decoder of the SEQUENCE type.
- */
-asn_dec_rval_t
-SEQUENCE_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- void **struct_ptr, const void *ptr, size_t size, int tag_mode) {
- /*
- * Bring closer parts of structure description.
- */
- asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics;
- asn_TYPE_member_t *elements = td->elements;
-
- /*
- * Parts of the structure being constructed.
- */
- void *st = *struct_ptr; /* Target structure. */
- asn_struct_ctx_t *ctx; /* Decoder context */
-
- ber_tlv_tag_t tlv_tag; /* T from TLV */
- asn_dec_rval_t rval; /* Return code from subparsers */
-
- ssize_t consumed_myself = 0; /* Consumed bytes from ptr */
- int edx; /* SEQUENCE element's index */
-
- ASN_DEBUG("Decoding %s as SEQUENCE", td->name);
-
- /*
- * Create the target structure if it is not present already.
- */
- if(st == 0) {
- st = *struct_ptr = CALLOC(1, specs->struct_size);
- if(st == 0) {
- RETURN(RC_FAIL);
- }
- }
-
- /*
- * Restore parsing context.
- */
- ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
-
- /*
- * Start to parse where left previously
- */
- switch(ctx->phase) {
- case 0:
- /*
- * PHASE 0.
- * Check that the set of tags associated with given structure
- * perfectly fits our expectations.
- */
-
- rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size,
- tag_mode, 1, &ctx->left, 0);
- if(rval.code != RC_OK) {
- ASN_DEBUG("%s tagging check failed: %d",
- td->name, rval.code);
- return rval;
- }
-
- if(ctx->left >= 0)
- ctx->left += rval.consumed; /* ?Substracted below! */
- ADVANCE(rval.consumed);
-
- NEXT_PHASE(ctx);
-
- ASN_DEBUG("Structure consumes %ld bytes, buffer %ld",
- (long)ctx->left, (long)size);
-
- /* Fall through */
- case 1:
- /*
- * PHASE 1.
- * From the place where we've left it previously,
- * try to decode the next member from the list of
- * this structure's elements.
- * (ctx->step) stores the member being processed
- * between invocations and the microphase {0,1} of parsing
- * that member:
- * step = ( * 2 + ).
- */
- for(edx = (ctx->step >> 1); edx < td->elements_count;
- edx++, ctx->step = (ctx->step & ~1) + 2) {
- void *memb_ptr; /* Pointer to the member */
- void **memb_ptr2; /* Pointer to that pointer */
- ssize_t tag_len; /* Length of TLV's T */
- int opt_edx_end; /* Next non-optional element */
- int use_bsearch;
- int n;
-
- if(ctx->step & 1)
- goto microphase2;
-
- /*
- * MICROPHASE 1: Synchronize decoding.
- */
- ASN_DEBUG("In %s SEQUENCE left %d, edx=%d flags=%d"
- " opt=%d ec=%d",
- td->name, (int)ctx->left, edx,
- elements[edx].flags, elements[edx].optional,
- td->elements_count);
-
- if(ctx->left == 0 /* No more stuff is expected */
- && (
- /* Explicit OPTIONAL specification reaches the end */
- (edx + elements[edx].optional
- == td->elements_count)
- ||
- /* All extensions are optional */
- (IN_EXTENSION_GROUP(specs, edx)
- && specs->ext_before > td->elements_count)
- )
- ) {
- ASN_DEBUG("End of SEQUENCE %s", td->name);
- /*
- * Found the legitimate end of the structure.
- */
- PHASE_OUT(ctx);
- RETURN(RC_OK);
- }
-
- /*
- * Fetch the T from TLV.
- */
- tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag);
- ASN_DEBUG("Current tag in %s SEQUENCE for element %d "
- "(%s) is %s encoded in %d bytes, of frame %ld",
- td->name, edx, elements[edx].name,
- ber_tlv_tag_string(tlv_tag), (int)tag_len, (long)LEFT);
- switch(tag_len) {
- case 0:
- if(!SIZE_VIOLATION) RETURN(RC_WMORE);
- /* Fall through */
- case -1:
- RETURN(RC_FAIL);
- }
-
- if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) {
- if(LEFT < 2) {
- if(SIZE_VIOLATION)
- RETURN(RC_FAIL);
- else
- RETURN(RC_WMORE);
- } else if(((const uint8_t *)ptr)[1] == 0) {
- ASN_DEBUG("edx = %d, opt = %d, ec=%d",
- edx, elements[edx].optional,
- td->elements_count);
- if((edx + elements[edx].optional
- == td->elements_count)
- || (IN_EXTENSION_GROUP(specs, edx)
- && specs->ext_before
- > td->elements_count)) {
- /*
- * Yeah, baby! Found the terminator
- * of the indefinite length structure.
- */
- /*
- * Proceed to the canonical
- * finalization function.
- * No advancing is necessary.
- */
- goto phase3;
- }
- }
- }
-
- /*
- * Find the next available type with this tag.
- */
- use_bsearch = 0;
- opt_edx_end = edx + elements[edx].optional + 1;
- if(opt_edx_end > td->elements_count)
- opt_edx_end = td->elements_count; /* Cap */
- else if(opt_edx_end - edx > 8) {
- /* Limit the scope of linear search... */
- opt_edx_end = edx + 8;
- use_bsearch = 1;
- /* ... and resort to bsearch() */
- }
- for(n = edx; n < opt_edx_end; n++) {
- if(BER_TAGS_EQUAL(tlv_tag, elements[n].tag)) {
- /*
- * Found element corresponding to the tag
- * being looked at.
- * Reposition over the right element.
- */
- edx = n;
- ctx->step = 1 + 2 * edx; /* Remember! */
- goto microphase2;
- } else if(elements[n].flags & ATF_OPEN_TYPE) {
- /*
- * This is the ANY type, which may bear
- * any flag whatsoever.
- */
- edx = n;
- ctx->step = 1 + 2 * edx; /* Remember! */
- goto microphase2;
- } else if(elements[n].tag == (ber_tlv_tag_t)-1) {
- use_bsearch = 1;
- break;
- }
- }
- if(use_bsearch) {
- /*
- * Resort to a binary search over
- * sorted array of tags.
- */
- asn_TYPE_tag2member_t *t2m;
- asn_TYPE_tag2member_t key;
- key.el_tag = tlv_tag;
- key.el_no = edx;
- t2m = (asn_TYPE_tag2member_t *)bsearch(&key,
- specs->tag2el, specs->tag2el_count,
- sizeof(specs->tag2el[0]), _t2e_cmp);
- if(t2m) {
- asn_TYPE_tag2member_t *best = 0;
- asn_TYPE_tag2member_t *t2m_f, *t2m_l;
- int edx_max = edx + elements[edx].optional;
- /*
- * Rewind to the first element with that tag,
- * `cause bsearch() does not guarantee order.
- */
- t2m_f = t2m + t2m->toff_first;
- t2m_l = t2m + t2m->toff_last;
- for(t2m = t2m_f; t2m <= t2m_l; t2m++) {
- if(t2m->el_no > edx_max) break;
- if(t2m->el_no < edx) continue;
- best = t2m;
- }
- if(best) {
- edx = best->el_no;
- ctx->step = 1 + 2 * edx;
- goto microphase2;
- }
- }
- n = opt_edx_end;
- }
- if(n == opt_edx_end) {
- /*
- * If tag is unknown, it may be either
- * an unknown (thus, incorrect) tag,
- * or an extension (...),
- * or an end of the indefinite-length structure.
- */
- if(!IN_EXTENSION_GROUP(specs,
- edx + elements[edx].optional)) {
- ASN_DEBUG("Unexpected tag %s (at %d)",
- ber_tlv_tag_string(tlv_tag), edx);
- ASN_DEBUG("Expected tag %s (%s)%s",
- ber_tlv_tag_string(elements[edx].tag),
- elements[edx].name,
- elements[edx].optional
- ?" or alternatives":"");
- RETURN(RC_FAIL);
- } else {
- /* Skip this tag */
- ssize_t skip;
- edx += elements[edx].optional;
-
- ASN_DEBUG("Skipping unexpected %s (at %d)",
- ber_tlv_tag_string(tlv_tag), edx);
- skip = ber_skip_length(opt_codec_ctx,
- BER_TLV_CONSTRUCTED(ptr),
- (const char *)ptr + tag_len,
- LEFT - tag_len);
- ASN_DEBUG("Skip length %d in %s",
- (int)skip, td->name);
- switch(skip) {
- case 0:
- if(!SIZE_VIOLATION) RETURN(RC_WMORE);
- /* Fall through */
- case -1:
- RETURN(RC_FAIL);
- }
-
- ADVANCE(skip + tag_len);
- ctx->step -= 2;
- edx--;
- continue; /* Try again with the next tag */
- }
- }
-
- /*
- * MICROPHASE 2: Invoke the member-specific decoder.
- */
- ctx->step |= 1; /* Confirm entering next microphase */
-microphase2:
- ASN_DEBUG("Inside SEQUENCE %s MF2", td->name);
-
- /*
- * Compute the position of the member inside a structure,
- * and also a type of containment (it may be contained
- * as pointer or using inline inclusion).
- */
- if(elements[edx].flags & ATF_POINTER) {
- /* Member is a pointer to another structure */
- memb_ptr2 = (void **)((char *)st + elements[edx].memb_offset);
- } else {
- /*
- * A pointer to a pointer
- * holding the start of the structure
- */
- memb_ptr = (char *)st + elements[edx].memb_offset;
- memb_ptr2 = &memb_ptr;
- }
- /*
- * Invoke the member fetch routine according to member's type
- */
- rval = elements[edx].type->ber_decoder(opt_codec_ctx,
- elements[edx].type,
- memb_ptr2, ptr, LEFT,
- elements[edx].tag_mode);
- ASN_DEBUG("In %s SEQUENCE decoded %d %s of %d "
- "in %d bytes rval.code %d, size=%d",
- td->name, edx, elements[edx].type->name,
- (int)LEFT, (int)rval.consumed, rval.code, (int)size);
- switch(rval.code) {
- case RC_OK:
- break;
- case RC_WMORE: /* More data expected */
- if(!SIZE_VIOLATION) {
- ADVANCE(rval.consumed);
- RETURN(RC_WMORE);
- }
- ASN_DEBUG("Size violation (c->l=%ld <= s=%ld)",
- (long)ctx->left, (long)size);
- /* Fall through */
- case RC_FAIL: /* Fatal error */
- RETURN(RC_FAIL);
- } /* switch(rval) */
-
- ADVANCE(rval.consumed);
- } /* for(all structure members) */
-
-phase3:
- ctx->phase = 3;
- case 3: /* 00 and other tags expected */
- case 4: /* only 00's expected */
-
- ASN_DEBUG("SEQUENCE %s Leftover: %ld, size = %ld",
- td->name, (long)ctx->left, (long)size);
-
- /*
- * Skip everything until the end of the SEQUENCE.
- */
- while(ctx->left) {
- ssize_t tl, ll;
-
- tl = ber_fetch_tag(ptr, LEFT, &tlv_tag);
- switch(tl) {
- case 0:
- if(!SIZE_VIOLATION) RETURN(RC_WMORE);
- /* Fall through */
- case -1:
- RETURN(RC_FAIL);
- }
-
- /*
- * If expected <0><0>...
- */
- if(ctx->left < 0
- && ((const uint8_t *)ptr)[0] == 0) {
- if(LEFT < 2) {
- if(SIZE_VIOLATION)
- RETURN(RC_FAIL);
- else
- RETURN(RC_WMORE);
- } else if(((const uint8_t *)ptr)[1] == 0) {
- /*
- * Correctly finished with <0><0>.
- */
- ADVANCE(2);
- ctx->left++;
- ctx->phase = 4;
- continue;
- }
- }
-
- if(!IN_EXTENSION_GROUP(specs, td->elements_count)
- || ctx->phase == 4) {
- ASN_DEBUG("Unexpected continuation "
- "of a non-extensible type "
- "%s (SEQUENCE): %s",
- td->name,
- ber_tlv_tag_string(tlv_tag));
- RETURN(RC_FAIL);
- }
-
- ll = ber_skip_length(opt_codec_ctx,
- BER_TLV_CONSTRUCTED(ptr),
- (const char *)ptr + tl, LEFT - tl);
- switch(ll) {
- case 0:
- if(!SIZE_VIOLATION) RETURN(RC_WMORE);
- /* Fall through */
- case -1:
- RETURN(RC_FAIL);
- }
-
- ADVANCE(tl + ll);
- }
-
- PHASE_OUT(ctx);
- }
-
- RETURN(RC_OK);
-}
-
-
-/*
- * The DER encoder of the SEQUENCE type.
- */
-asn_enc_rval_t
-SEQUENCE_encode_der(asn_TYPE_descriptor_t *td,
- void *sptr, int tag_mode, ber_tlv_tag_t tag,
- asn_app_consume_bytes_f *cb, void *app_key) {
- size_t computed_size = 0;
- asn_enc_rval_t erval;
- ssize_t ret;
- int edx;
-
- ASN_DEBUG("%s %s as SEQUENCE",
- cb?"Encoding":"Estimating", td->name);
-
- /*
- * Gather the length of the underlying members sequence.
- */
- for(edx = 0; edx < td->elements_count; edx++) {
- asn_TYPE_member_t *elm = &td->elements[edx];
- void *memb_ptr;
- if(elm->flags & ATF_POINTER) {
- memb_ptr = *(void **)((char *)sptr + elm->memb_offset);
- if(!memb_ptr) {
- if(elm->optional) continue;
- /* Mandatory element is missing */
- _ASN_ENCODE_FAILED;
- }
- } else {
- memb_ptr = (void *)((char *)sptr + elm->memb_offset);
- }
- erval = elm->type->der_encoder(elm->type, memb_ptr,
- elm->tag_mode, elm->tag,
- 0, 0);
- if(erval.encoded == -1)
- return erval;
- computed_size += erval.encoded;
- ASN_DEBUG("Member %d %s estimated %ld bytes",
- edx, elm->name, (long)erval.encoded);
- }
-
- /*
- * Encode the TLV for the sequence itself.
- */
- ret = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key);
- ASN_DEBUG("Wrote tags: %ld (+%ld)", (long)ret, (long)computed_size);
- if(ret == -1)
- _ASN_ENCODE_FAILED;
- erval.encoded = computed_size + ret;
-
- if(!cb) _ASN_ENCODED_OK(erval);
-
- /*
- * Encode all members.
- */
- for(edx = 0; edx < td->elements_count; edx++) {
- asn_TYPE_member_t *elm = &td->elements[edx];
- asn_enc_rval_t tmperval;
- void *memb_ptr;
-
- if(elm->flags & ATF_POINTER) {
- memb_ptr = *(void **)((char *)sptr + elm->memb_offset);
- if(!memb_ptr) continue;
- } else {
- memb_ptr = (void *)((char *)sptr + elm->memb_offset);
- }
- tmperval = elm->type->der_encoder(elm->type, memb_ptr,
- elm->tag_mode, elm->tag,
- cb, app_key);
- if(tmperval.encoded == -1)
- return tmperval;
- computed_size -= tmperval.encoded;
- ASN_DEBUG("Member %d %s of SEQUENCE %s encoded in %ld bytes",
- edx, elm->name, td->name, (long)tmperval.encoded);
- }
-
- if(computed_size != 0)
- /*
- * Encoded size is not equal to the computed size.
- */
- _ASN_ENCODE_FAILED;
-
- _ASN_ENCODED_OK(erval);
-}
-
-
-#undef XER_ADVANCE
-#define XER_ADVANCE(num_bytes) do { \
- size_t num = num_bytes; \
- buf_ptr = ((const char *)buf_ptr) + num;\
- size -= num; \
- consumed_myself += num; \
- } while(0)
-
-/*
- * Decode the XER (XML) data.
- */
-asn_dec_rval_t
-SEQUENCE_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- void **struct_ptr, const char *opt_mname,
- const void *buf_ptr, size_t size) {
- /*
- * Bring closer parts of structure description.
- */
- asn_SEQUENCE_specifics_t *specs
- = (asn_SEQUENCE_specifics_t *)td->specifics;
- asn_TYPE_member_t *elements = td->elements;
- const char *xml_tag = opt_mname ? opt_mname : td->xml_tag;
-
- /*
- * ... and parts of the structure being constructed.
- */
- void *st = *struct_ptr; /* Target structure. */
- asn_struct_ctx_t *ctx; /* Decoder context */
-
- asn_dec_rval_t rval; /* Return value from a decoder */
- ssize_t consumed_myself = 0; /* Consumed bytes from ptr */
- int edx; /* Element index */
- int edx_end;
-
- /*
- * Create the target structure if it is not present already.
- */
- if(st == 0) {
- st = *struct_ptr = CALLOC(1, specs->struct_size);
- if(st == 0) RETURN(RC_FAIL);
- }
-
- /*
- * Restore parsing context.
- */
- ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
-
-
- /*
- * Phases of XER/XML processing:
- * Phase 0: Check that the opening tag matches our expectations.
- * Phase 1: Processing body and reacting on closing tag.
- * Phase 2: Processing inner type.
- * Phase 3: Skipping unknown extensions.
- * Phase 4: PHASED OUT
- */
- for(edx = ctx->step; ctx->phase <= 3;) {
- pxer_chunk_type_e ch_type; /* XER chunk type */
- ssize_t ch_size; /* Chunk size */
- xer_check_tag_e tcv; /* Tag check value */
- asn_TYPE_member_t *elm;
- int n;
-
- /*
- * Go inside the inner member of a sequence.
- */
- if(ctx->phase == 2) {
- asn_dec_rval_t tmprval;
- void *memb_ptr; /* Pointer to the member */
- void **memb_ptr2; /* Pointer to that pointer */
-
- elm = &td->elements[edx];
-
- if(elm->flags & ATF_POINTER) {
- /* Member is a pointer to another structure */
- memb_ptr2 = (void **)((char *)st
- + elm->memb_offset);
- } else {
- memb_ptr = (char *)st + elm->memb_offset;
- memb_ptr2 = &memb_ptr;
- }
-
- /* Invoke the inner type decoder, m.b. multiple times */
- tmprval = elm->type->xer_decoder(opt_codec_ctx,
- elm->type, memb_ptr2, elm->name,
- buf_ptr, size);
- XER_ADVANCE(tmprval.consumed);
- if(tmprval.code != RC_OK)
- RETURN(tmprval.code);
- ctx->phase = 1; /* Back to body processing */
- ctx->step = ++edx;
- ASN_DEBUG("XER/SEQUENCE phase => %d, step => %d",
- ctx->phase, ctx->step);
- /* Fall through */
- }
-
- /*
- * Get the next part of the XML stream.
- */
- ch_size = xer_next_token(&ctx->context, buf_ptr, size,
- &ch_type);
- switch(ch_size) {
- case -1:
- RETURN(RC_FAIL);
- case 0:
- RETURN(RC_WMORE);
- default:
- switch(ch_type) {
- case PXER_COMMENT: /* Got XML comment */
- case PXER_TEXT: /* Ignore free-standing text */
- XER_ADVANCE(ch_size); /* Skip silently */
- continue;
- case PXER_TAG:
- break; /* Check the rest down there */
- }
- }
-
- tcv = xer_check_tag(buf_ptr, ch_size, xml_tag);
- ASN_DEBUG("XER/SEQUENCE: tcv = %d, ph=%d [%s]",
- tcv, ctx->phase, xml_tag);
-
- /* Skip the extensions section */
- if(ctx->phase == 3) {
- switch(xer_skip_unknown(tcv, &ctx->left)) {
- case -1:
- ctx->phase = 4;
- RETURN(RC_FAIL);
- case 0:
- XER_ADVANCE(ch_size);
- continue;
- case 1:
- XER_ADVANCE(ch_size);
- ctx->phase = 1;
- continue;
- case 2:
- ctx->phase = 1;
- break;
- }
- }
-
- switch(tcv) {
- case XCT_CLOSING:
- if(ctx->phase == 0) break;
- ctx->phase = 0;
- /* Fall through */
- case XCT_BOTH:
- if(ctx->phase == 0) {
- if(edx >= td->elements_count
- ||
- /* Explicit OPTIONAL specs reaches the end */
- (edx + elements[edx].optional
- == td->elements_count)
- ||
- /* All extensions are optional */
- (IN_EXTENSION_GROUP(specs, edx)
- && specs->ext_before
- > td->elements_count)
- ) {
- XER_ADVANCE(ch_size);
- ctx->phase = 4; /* Phase out */
- RETURN(RC_OK);
- } else {
- ASN_DEBUG("Premature end of XER SEQUENCE");
- RETURN(RC_FAIL);
- }
- }
- /* Fall through */
- case XCT_OPENING:
- if(ctx->phase == 0) {
- XER_ADVANCE(ch_size);
- ctx->phase = 1; /* Processing body phase */
- continue;
- }
- /* Fall through */
- case XCT_UNKNOWN_OP:
- case XCT_UNKNOWN_BO:
-
- ASN_DEBUG("XER/SEQUENCE: tcv=%d, ph=%d, edx=%d",
- tcv, ctx->phase, edx);
- if(ctx->phase != 1) {
- break; /* Really unexpected */
- }
-
- if(edx < td->elements_count) {
- /*
- * Search which member corresponds to this tag.
- */
- edx_end = edx + elements[edx].optional + 1;
- if(edx_end > td->elements_count)
- edx_end = td->elements_count;
- for(n = edx; n < edx_end; n++) {
- elm = &td->elements[n];
- tcv = xer_check_tag(buf_ptr,
- ch_size, elm->name);
- switch(tcv) {
- case XCT_BOTH:
- case XCT_OPENING:
- /*
- * Process this member.
- */
- ctx->step = edx = n;
- ctx->phase = 2;
- break;
- case XCT_UNKNOWN_OP:
- case XCT_UNKNOWN_BO:
- continue;
- default:
- n = edx_end;
- break; /* Phase out */
- }
- break;
- }
- if(n != edx_end)
- continue;
- } else {
- ASN_DEBUG("Out of defined members: %d/%d",
- edx, td->elements_count);
- }
-
- /* It is expected extension */
- if(IN_EXTENSION_GROUP(specs,
- edx + (edx < td->elements_count
- ? elements[edx].optional : 0))) {
- ASN_DEBUG("Got anticipated extension at %d",
- edx);
- /*
- * Check for (XCT_BOTH or XCT_UNKNOWN_BO)
- * By using a mask. Only record a pure
- * tags.
- */
- if(tcv & XCT_CLOSING) {
- /* Found without body */
- } else {
- ctx->left = 1;
- ctx->phase = 3; /* Skip ...'s */
- }
- XER_ADVANCE(ch_size);
- continue;
- }
-
- /* Fall through */
- default:
- break;
- }
-
- ASN_DEBUG("Unexpected XML tag in SEQUENCE [%c%c%c%c%c%c]",
- size>0?((const char *)buf_ptr)[0]:'.',
- size>1?((const char *)buf_ptr)[1]:'.',
- size>2?((const char *)buf_ptr)[2]:'.',
- size>3?((const char *)buf_ptr)[3]:'.',
- size>4?((const char *)buf_ptr)[4]:'.',
- size>5?((const char *)buf_ptr)[5]:'.');
- break;
- }
-
- ctx->phase = 4; /* "Phase out" on hard failure */
- RETURN(RC_FAIL);
-}
-
-asn_enc_rval_t
-SEQUENCE_encode_xer(asn_TYPE_descriptor_t *td, void *sptr,
- int ilevel, enum xer_encoder_flags_e flags,
- asn_app_consume_bytes_f *cb, void *app_key) {
- asn_enc_rval_t er;
- int xcan = (flags & XER_F_CANONICAL);
- int edx;
-
- if(!sptr)
- _ASN_ENCODE_FAILED;
-
- er.encoded = 0;
-
- for(edx = 0; edx < td->elements_count; edx++) {
- asn_enc_rval_t tmper;
- asn_TYPE_member_t *elm = &td->elements[edx];
- void *memb_ptr;
- const char *mname = elm->name;
- unsigned int mlen = strlen(mname);
-
- if(elm->flags & ATF_POINTER) {
- memb_ptr = *(void **)((char *)sptr + elm->memb_offset);
- if(!memb_ptr) {
- if(elm->optional)
- continue;
- /* Mandatory element is missing */
- _ASN_ENCODE_FAILED;
- }
- } else {
- memb_ptr = (void *)((char *)sptr + elm->memb_offset);
- }
-
- if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel);
- _ASN_CALLBACK3("<", 1, mname, mlen, ">", 1);
-
- /* Print the member itself */
- tmper = elm->type->xer_encoder(elm->type, memb_ptr,
- ilevel + 1, flags, cb, app_key);
- if(tmper.encoded == -1) return tmper;
-
- _ASN_CALLBACK3("", 2, mname, mlen, ">", 1);
- er.encoded += 5 + (2 * mlen) + tmper.encoded;
- }
-
- if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel - 1);
-
- _ASN_ENCODED_OK(er);
-cb_failed:
- _ASN_ENCODE_FAILED;
-}
-
-int
-SEQUENCE_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
- asn_app_consume_bytes_f *cb, void *app_key) {
- int edx;
- int ret;
-
- if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0;
-
- /* Dump preamble */
- if(cb(td->name, strlen(td->name), app_key) < 0
- || cb(" ::= {", 6, app_key) < 0)
- return -1;
-
- for(edx = 0; edx < td->elements_count; edx++) {
- asn_TYPE_member_t *elm = &td->elements[edx];
- const void *memb_ptr;
-
- if(elm->flags & ATF_POINTER) {
- memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset);
- if(!memb_ptr) {
- if(elm->optional) continue;
- /* Print line */
- /* Fall through */
- }
- } else {
- memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
- }
-
- /* Indentation */
- _i_INDENT(1);
-
- /* Print the member's name and stuff */
- if(cb(elm->name, strlen(elm->name), app_key) < 0
- || cb(": ", 2, app_key) < 0)
- return -1;
-
- /* Print the member itself */
- ret = elm->type->print_struct(elm->type, memb_ptr, ilevel + 1,
- cb, app_key);
- if(ret) return ret;
- }
-
- ilevel--;
- _i_INDENT(1);
-
- return (cb("}", 1, app_key) < 0) ? -1 : 0;
-}
-
-void
-SEQUENCE_free(asn_TYPE_descriptor_t *td, void *sptr, int contents_only) {
- int edx;
-
- if(!td || !sptr)
- return;
-
- ASN_DEBUG("Freeing %s as SEQUENCE", td->name);
-
- for(edx = 0; edx < td->elements_count; edx++) {
- asn_TYPE_member_t *elm = &td->elements[edx];
- void *memb_ptr;
- if(elm->flags & ATF_POINTER) {
- memb_ptr = *(void **)((char *)sptr + elm->memb_offset);
- if(memb_ptr)
- ASN_STRUCT_FREE(*elm->type, memb_ptr);
- } else {
- memb_ptr = (void *)((char *)sptr + elm->memb_offset);
- ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr);
- }
- }
-
- if(!contents_only) {
- FREEMEM(sptr);
- }
-}
-
-int
-SEQUENCE_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
- asn_app_constraint_failed_f *ctfailcb, void *app_key) {
- int edx;
-
- if(!sptr) {
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: value not given (%s:%d)",
- td->name, __FILE__, __LINE__);
- return -1;
- }
-
- /*
- * Iterate over structure members and check their validity.
- */
- for(edx = 0; edx < td->elements_count; edx++) {
- asn_TYPE_member_t *elm = &td->elements[edx];
- const void *memb_ptr;
-
- if(elm->flags & ATF_POINTER) {
- memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset);
- if(!memb_ptr) {
- if(elm->optional)
- continue;
- _ASN_CTFAIL(app_key, td, sptr,
- "%s: mandatory element %s absent (%s:%d)",
- td->name, elm->name, __FILE__, __LINE__);
- return -1;
- }
- } else {
- memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
- }
-
- if(elm->memb_constraints) {
- int ret = elm->memb_constraints(elm->type, memb_ptr,
- ctfailcb, app_key);
- if(ret) return ret;
- } else {
- int ret = elm->type->check_constraints(elm->type,
- memb_ptr, ctfailcb, app_key);
- if(ret) return ret;
- /*
- * Cannot inherit it earlier:
- * need to make sure we get the updated version.
- */
- elm->memb_constraints = elm->type->check_constraints;
- }
- }
-
- return 0;
-}
-
-asn_dec_rval_t
-SEQUENCE_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
- asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics;
- void *st = *sptr; /* Target structure. */
- int extpresent; /* Extension additions are present */
- uint8_t *opres; /* Presence of optional root members */
- asn_per_data_t opmd;
- asn_dec_rval_t rv;
- int edx;
-
- (void)constraints;
-
- if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx))
- _ASN_DECODE_FAILED;
-
- if(!st) {
- st = *sptr = CALLOC(1, specs->struct_size);
- if(!st) _ASN_DECODE_FAILED;
- }
-
- ASN_DEBUG("Decoding %s as SEQUENCE (UPER)", td->name);
-
- /* Handle extensions */
- if(specs->ext_before >= 0) {
- extpresent = per_get_few_bits(pd, 1);
- if(extpresent < 0) _ASN_DECODE_STARVED;
- } else {
- extpresent = 0;
- }
-
- /* Prepare a place and read-in the presence bitmap */
- memset(&opmd, 0, sizeof(opmd));
- if(specs->roms_count) {
- opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1);
- if(!opres) _ASN_DECODE_FAILED;
- /* Get the presence map */
- if(per_get_many_bits(pd, opres, 0, specs->roms_count)) {
- FREEMEM(opres);
- _ASN_DECODE_STARVED;
- }
- opmd.buffer = opres;
- opmd.nbits = specs->roms_count;
- ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)",
- td->name, specs->roms_count, *opres);
- } else {
- opres = 0;
- }
-
- /*
- * Get the sequence ROOT elements.
- */
- for(edx = 0; edx < td->elements_count; edx++) {
- asn_TYPE_member_t *elm = &td->elements[edx];
- void *memb_ptr; /* Pointer to the member */
- void **memb_ptr2; /* Pointer to that pointer */
-
- if(IN_EXTENSION_GROUP(specs, edx))
- continue;
-
- /* Fetch the pointer to this member */
- if(elm->flags & ATF_POINTER) {
- memb_ptr2 = (void **)((char *)st + elm->memb_offset);
- } else {
- memb_ptr = (char *)st + elm->memb_offset;
- memb_ptr2 = &memb_ptr;
- }
-
- /* Deal with optionality */
- if(elm->optional) {
- int present = per_get_few_bits(&opmd, 1);
- ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)",
- td->name, elm->name, present,
- (int)opmd.nboff, (int)opmd.nbits);
- if(present == 0) {
- /* This element is not present */
- if(elm->default_value) {
- /* Fill-in DEFAULT */
- if(elm->default_value(1, memb_ptr2)) {
- FREEMEM(opres);
- _ASN_DECODE_FAILED;
- }
- ASN_DEBUG("Filled-in default");
- }
- /* The member is just not present */
- continue;
- }
- /* Fall through */
- }
-
- /* Fetch the member from the stream */
- ASN_DEBUG("Decoding member %s in %s", elm->name, td->name);
- rv = elm->type->uper_decoder(opt_codec_ctx, elm->type,
- elm->per_constraints, memb_ptr2, pd);
- if(rv.code != RC_OK) {
- ASN_DEBUG("Failed decode %s in %s",
- elm->name, td->name);
- FREEMEM(opres);
- return rv;
- }
- }
-
- /* Optionality map is not needed anymore */
- FREEMEM(opres);
-
- /*
- * Deal with extensions.
- */
- if(extpresent) {
- ssize_t bmlength;
- uint8_t *epres; /* Presence of extension members */
- asn_per_data_t epmd;
-
- bmlength = uper_get_nslength(pd);
- if(bmlength < 0) _ASN_DECODE_STARVED;
-
- ASN_DEBUG("Extensions %ld present in %s", (long)bmlength, td->name);
-
- epres = (uint8_t *)MALLOC((bmlength + 15) >> 3);
- if(!epres) _ASN_DECODE_STARVED;
-
- /* Get the extensions map */
- if(per_get_many_bits(pd, epres, 0, bmlength))
- _ASN_DECODE_STARVED;
-
- memset(&epmd, 0, sizeof(epmd));
- epmd.buffer = epres;
- epmd.nbits = bmlength;
- ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)",
- td->name, (long)bmlength, *epres);
-
- /* Go over extensions and read them in */
- for(edx = specs->ext_after + 1; edx < td->elements_count; edx++) {
- asn_TYPE_member_t *elm = &td->elements[edx];
- void *memb_ptr; /* Pointer to the member */
- void **memb_ptr2; /* Pointer to that pointer */
- int present;
-
- if(!IN_EXTENSION_GROUP(specs, edx)) {
- ASN_DEBUG("%d is not extension", edx);
- continue;
- }
-
- /* Fetch the pointer to this member */
- if(elm->flags & ATF_POINTER) {
- memb_ptr2 = (void **)((char *)st + elm->memb_offset);
- } else {
- memb_ptr = (void *)((char *)st + elm->memb_offset);
- memb_ptr2 = &memb_ptr;
- }
-
- present = per_get_few_bits(&epmd, 1);
- if(present <= 0) {
- if(present < 0) break; /* No more extensions */
- continue;
- }
-
- ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, *memb_ptr2);
- rv = uper_open_type_get(opt_codec_ctx, elm->type,
- elm->per_constraints, memb_ptr2, pd);
- if(rv.code != RC_OK) {
- FREEMEM(epres);
- return rv;
- }
- }
-
- /* Skip over overflow extensions which aren't present
- * in this system's version of the protocol */
- for(;;) {
- ASN_DEBUG("Getting overflow extensions");
- switch(per_get_few_bits(&epmd, 1)) {
- case -1:
- break;
- case 0:
- continue;
- default:
- if(uper_open_type_skip(opt_codec_ctx, pd)) {
- FREEMEM(epres);
- _ASN_DECODE_STARVED;
- }
- }
- break;
- }
-
- FREEMEM(epres);
- }
-
- /* Fill DEFAULT members in extensions */
- for(edx = specs->roms_count; edx < specs->roms_count
- + specs->aoms_count; edx++) {
- asn_TYPE_member_t *elm = &td->elements[edx];
- void **memb_ptr2; /* Pointer to member pointer */
-
- if(!elm->default_value) continue;
-
- /* Fetch the pointer to this member */
- if(elm->flags & ATF_POINTER) {
- memb_ptr2 = (void **)((char *)st
- + elm->memb_offset);
- if(*memb_ptr2) continue;
- } else {
- continue; /* Extensions are all optionals */
- }
-
- /* Set default value */
- if(elm->default_value(1, memb_ptr2)) {
- _ASN_DECODE_FAILED;
- }
- }
-
- rv.consumed = 0;
- rv.code = RC_OK;
- return rv;
-}
-
-static int
-SEQUENCE_handle_extensions(asn_TYPE_descriptor_t *td, void *sptr,
- asn_per_outp_t *po1, asn_per_outp_t *po2) {
- asn_SEQUENCE_specifics_t *specs
- = (asn_SEQUENCE_specifics_t *)td->specifics;
- int exts_present = 0;
- int exts_count = 0;
- int edx;
-
- if(specs->ext_before < 0)
- return 0;
-
- /* Find out which extensions are present */
- for(edx = specs->ext_after + 1; edx < td->elements_count; edx++) {
- asn_TYPE_member_t *elm = &td->elements[edx];
- void *memb_ptr; /* Pointer to the member */
- void **memb_ptr2; /* Pointer to that pointer */
- int present;
-
- if(!IN_EXTENSION_GROUP(specs, edx)) {
- ASN_DEBUG("%s (@%d) is not extension", elm->type->name, edx);
- continue;
- }
-
- /* Fetch the pointer to this member */
- if(elm->flags & ATF_POINTER) {
- memb_ptr2 = (void **)((char *)sptr + elm->memb_offset);
- present = (*memb_ptr2 != 0);
- } else {
- memb_ptr = (void *)((char *)sptr + elm->memb_offset);
- memb_ptr2 = &memb_ptr;
- present = 1;
- }
-
- ASN_DEBUG("checking %s (@%d) present => %d",
- elm->type->name, edx, present);
- exts_count++;
- exts_present += present;
-
- /* Encode as presence marker */
- if(po1 && per_put_few_bits(po1, present, 1))
- return -1;
- /* Encode as open type field */
- if(po2 && present && uper_open_type_put(elm->type,
- elm->per_constraints, *memb_ptr2, po2))
- return -1;
-
- }
-
- return exts_present ? exts_count : 0;
-}
-
-asn_enc_rval_t
-SEQUENCE_encode_uper(asn_TYPE_descriptor_t *td,
- asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) {
- asn_SEQUENCE_specifics_t *specs
- = (asn_SEQUENCE_specifics_t *)td->specifics;
- asn_enc_rval_t er;
- int n_extensions;
- int edx;
- int i;
-
- (void)constraints;
-
- if(!sptr)
- _ASN_ENCODE_FAILED;
-
- er.encoded = 0;
-
- ASN_DEBUG("Encoding %s as SEQUENCE (UPER)", td->name);
-
-
- /*
- * X.691#18.1 Whether structure is extensible
- * and whether to encode extensions
- */
- if(specs->ext_before >= 0) {
- n_extensions = SEQUENCE_handle_extensions(td, sptr, 0, 0);
- per_put_few_bits(po, n_extensions ? 1 : 0, 1);
- } else {
- n_extensions = 0; /* There are no extensions to encode */
- }
-
- /* Encode a presence bitmap */
- for(i = 0; i < specs->roms_count; i++) {
- asn_TYPE_member_t *elm;
- void *memb_ptr; /* Pointer to the member */
- void **memb_ptr2; /* Pointer to that pointer */
- int present;
-
- edx = specs->oms[i];
- elm = &td->elements[edx];
-
- /* Fetch the pointer to this member */
- if(elm->flags & ATF_POINTER) {
- memb_ptr2 = (void **)((char *)sptr + elm->memb_offset);
- present = (*memb_ptr2 != 0);
- } else {
- memb_ptr = (void *)((char *)sptr + elm->memb_offset);
- memb_ptr2 = &memb_ptr;
- present = 1;
- }
-
- /* Eliminate default values */
- if(present && elm->default_value
- && elm->default_value(0, memb_ptr2) == 1)
- present = 0;
-
- ASN_DEBUG("Element %s %s %s->%s is %s",
- elm->flags & ATF_POINTER ? "ptr" : "inline",
- elm->default_value ? "def" : "wtv",
- td->name, elm->name, present ? "present" : "absent");
- if(per_put_few_bits(po, present, 1))
- _ASN_ENCODE_FAILED;
- }
-
- /*
- * Encode the sequence ROOT elements.
- */
- ASN_DEBUG("ext_after = %d, ec = %d, eb = %d", specs->ext_after, td->elements_count, specs->ext_before);
- for(edx = 0; edx < ((specs->ext_after < 0)
- ? td->elements_count : specs->ext_before - 1); edx++) {
-
- asn_TYPE_member_t *elm = &td->elements[edx];
- void *memb_ptr; /* Pointer to the member */
- void **memb_ptr2; /* Pointer to that pointer */
-
- if(IN_EXTENSION_GROUP(specs, edx))
- continue;
-
- ASN_DEBUG("About to encode %s", elm->type->name);
-
- /* Fetch the pointer to this member */
- if(elm->flags & ATF_POINTER) {
- memb_ptr2 = (void **)((char *)sptr + elm->memb_offset);
- if(!*memb_ptr2) {
- ASN_DEBUG("Element %s %d not present",
- elm->name, edx);
- if(elm->optional)
- continue;
- /* Mandatory element is missing */
- _ASN_ENCODE_FAILED;
- }
- } else {
- memb_ptr = (void *)((char *)sptr + elm->memb_offset);
- memb_ptr2 = &memb_ptr;
- }
-
- /* Eliminate default values */
- if(elm->default_value && elm->default_value(0, memb_ptr2) == 1)
- continue;
-
- ASN_DEBUG("Encoding %s->%s", td->name, elm->name);
- er = elm->type->uper_encoder(elm->type, elm->per_constraints,
- *memb_ptr2, po);
- if(er.encoded == -1)
- return er;
- }
-
- /* No extensions to encode */
- if(!n_extensions) _ASN_ENCODED_OK(er);
-
- ASN_DEBUG("Length of %d bit-map", n_extensions);
- /* #18.8. Write down the presence bit-map length. */
- if(uper_put_nslength(po, n_extensions))
- _ASN_ENCODE_FAILED;
-
- ASN_DEBUG("Bit-map of %d elements", n_extensions);
- /* #18.7. Encoding the extensions presence bit-map. */
- /* TODO: act upon NOTE in #18.7 for canonical PER */
- if(SEQUENCE_handle_extensions(td, sptr, po, 0) != n_extensions)
- _ASN_ENCODE_FAILED;
-
- ASN_DEBUG("Writing %d extensions", n_extensions);
- /* #18.9. Encode extensions as open type fields. */
- if(SEQUENCE_handle_extensions(td, sptr, 0, po) != n_extensions)
- _ASN_ENCODE_FAILED;
-
- _ASN_ENCODED_OK(er);
-}
-
diff --git a/src/third_party/asn1/constr_SEQUENCE.h b/src/third_party/asn1/constr_SEQUENCE.h
deleted file mode 100644
index 72781be2..00000000
--- a/src/third_party/asn1/constr_SEQUENCE.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#ifndef _CONSTR_SEQUENCE_H_
-#define _CONSTR_SEQUENCE_H_
-
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- typedef struct asn_SEQUENCE_specifics_s {
- /*
- * Target structure description.
- */
- int struct_size; /* Size of the target structure. */
- int ctx_offset; /* Offset of the asn_struct_ctx_t member */
-
- /*
- * Tags to members mapping table (sorted).
- */
- asn_TYPE_tag2member_t *tag2el;
- int tag2el_count;
-
- /*
- * Optional members of the extensions root (roms) or additions (aoms).
- * Meaningful for PER.
- */
- int *oms; /* Optional MemberS */
- int roms_count; /* Root optional members count */
- int aoms_count; /* Additions optional members count */
-
- /*
- * Description of an extensions group.
- */
- int ext_after; /* Extensions start after this member */
- int ext_before; /* Extensions stop before this member */
- } asn_SEQUENCE_specifics_t;
-
-
- /*
- * A set specialized functions dealing with the SEQUENCE type.
- */
- asn_struct_free_f SEQUENCE_free;
- asn_struct_print_f SEQUENCE_print;
- asn_constr_check_f SEQUENCE_constraint;
- ber_type_decoder_f SEQUENCE_decode_ber;
- der_type_encoder_f SEQUENCE_encode_der;
- xer_type_decoder_f SEQUENCE_decode_xer;
- xer_type_encoder_f SEQUENCE_encode_xer;
- per_type_decoder_f SEQUENCE_decode_uper;
- per_type_encoder_f SEQUENCE_encode_uper;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CONSTR_SEQUENCE_H_ */
diff --git a/src/third_party/asn1/constr_SEQUENCE_OF.c b/src/third_party/asn1/constr_SEQUENCE_OF.c
deleted file mode 100644
index a3fa5c2f..00000000
--- a/src/third_party/asn1/constr_SEQUENCE_OF.c
+++ /dev/null
@@ -1,208 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004, 2006 Lev Walkin .
- * All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#include
-#include
-#include
-
-/*
- * The DER encoder of the SEQUENCE OF type.
- */
-asn_enc_rval_t
-SEQUENCE_OF_encode_der(asn_TYPE_descriptor_t *td, void *ptr,
- int tag_mode, ber_tlv_tag_t tag,
- asn_app_consume_bytes_f *cb, void *app_key) {
- asn_TYPE_member_t *elm = td->elements;
- asn_anonymous_sequence_ *list = _A_SEQUENCE_FROM_VOID(ptr);
- size_t computed_size = 0;
- ssize_t encoding_size = 0;
- asn_enc_rval_t erval;
- int edx;
-
- ASN_DEBUG("Estimating size of SEQUENCE OF %s", td->name);
-
- /*
- * Gather the length of the underlying members sequence.
- */
- for(edx = 0; edx < list->count; edx++) {
- void *memb_ptr = list->array[edx];
- if(!memb_ptr) continue;
- erval = elm->type->der_encoder(elm->type, memb_ptr,
- 0, elm->tag,
- 0, 0);
- if(erval.encoded == -1)
- return erval;
- computed_size += erval.encoded;
- }
-
- /*
- * Encode the TLV for the sequence itself.
- */
- encoding_size = der_write_tags(td, computed_size, tag_mode, 1, tag,
- cb, app_key);
- if(encoding_size == -1) {
- erval.encoded = -1;
- erval.failed_type = td;
- erval.structure_ptr = ptr;
- return erval;
- }
-
- computed_size += encoding_size;
- if(!cb) {
- erval.encoded = computed_size;
- _ASN_ENCODED_OK(erval);
- }
-
- ASN_DEBUG("Encoding members of SEQUENCE OF %s", td->name);
-
- /*
- * Encode all members.
- */
- for(edx = 0; edx < list->count; edx++) {
- void *memb_ptr = list->array[edx];
- if(!memb_ptr) continue;
- erval = elm->type->der_encoder(elm->type, memb_ptr,
- 0, elm->tag,
- cb, app_key);
- if(erval.encoded == -1)
- return erval;
- encoding_size += erval.encoded;
- }
-
- if(computed_size != (size_t)encoding_size) {
- /*
- * Encoded size is not equal to the computed size.
- */
- erval.encoded = -1;
- erval.failed_type = td;
- erval.structure_ptr = ptr;
- } else {
- erval.encoded = computed_size;
- erval.structure_ptr = 0;
- erval.failed_type = 0;
- }
-
- return erval;
-}
-
-asn_enc_rval_t
-SEQUENCE_OF_encode_xer(asn_TYPE_descriptor_t *td, void *sptr,
- int ilevel, enum xer_encoder_flags_e flags,
- asn_app_consume_bytes_f *cb, void *app_key) {
- asn_enc_rval_t er;
- asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics;
- asn_TYPE_member_t *elm = td->elements;
- asn_anonymous_sequence_ *list = _A_SEQUENCE_FROM_VOID(sptr);
- const char *mname = specs->as_XMLValueList
- ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag);
- unsigned int mlen = mname ? strlen(mname) : 0;
- int xcan = (flags & XER_F_CANONICAL);
- int i;
-
- if(!sptr) _ASN_ENCODE_FAILED;
-
- er.encoded = 0;
-
- for(i = 0; i < list->count; i++) {
- asn_enc_rval_t tmper;
- void *memb_ptr = list->array[i];
- if(!memb_ptr) continue;
-
- if(mname) {
- if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel);
- _ASN_CALLBACK3("<", 1, mname, mlen, ">", 1);
- }
-
- tmper = elm->type->xer_encoder(elm->type, memb_ptr,
- ilevel + 1, flags, cb, app_key);
- if(tmper.encoded == -1) return tmper;
- if(tmper.encoded == 0 && specs->as_XMLValueList) {
- const char *name = elm->type->xml_tag;
- size_t len = strlen(name);
- if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel + 1);
- _ASN_CALLBACK3("<", 1, name, len, "/>", 2);
- }
-
- if(mname) {
- _ASN_CALLBACK3("", 2, mname, mlen, ">", 1);
- er.encoded += 5;
- }
-
- er.encoded += (2 * mlen) + tmper.encoded;
- }
-
- if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel - 1);
-
- _ASN_ENCODED_OK(er);
-cb_failed:
- _ASN_ENCODE_FAILED;
-}
-
-asn_enc_rval_t
-SEQUENCE_OF_encode_uper(asn_TYPE_descriptor_t *td,
- asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) {
- asn_anonymous_sequence_ *list;
- asn_per_constraint_t *ct;
- asn_enc_rval_t er;
- asn_TYPE_member_t *elm = td->elements;
- int seq;
-
- if(!sptr) _ASN_ENCODE_FAILED;
- list = _A_SEQUENCE_FROM_VOID(sptr);
-
- er.encoded = 0;
-
- ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count);
-
- if(constraints) ct = &constraints->size;
- else if(td->per_constraints) ct = &td->per_constraints->size;
- else ct = 0;
-
- /* If extensible constraint, check if size is in root */
- if(ct) {
- int not_in_root = (list->count < ct->lower_bound
- || list->count > ct->upper_bound);
- ASN_DEBUG("lb %ld ub %ld %s",
- ct->lower_bound, ct->upper_bound,
- ct->flags & APC_EXTENSIBLE ? "ext" : "fix");
- if(ct->flags & APC_EXTENSIBLE) {
- /* Declare whether size is in extension root */
- if(per_put_few_bits(po, not_in_root, 1))
- _ASN_ENCODE_FAILED;
- if(not_in_root) ct = 0;
- } else if(not_in_root && ct->effective_bits >= 0)
- _ASN_ENCODE_FAILED;
- }
-
- if(ct && ct->effective_bits >= 0) {
- /* X.691, #19.5: No length determinant */
- if(per_put_few_bits(po, list->count - ct->lower_bound,
- ct->effective_bits))
- _ASN_ENCODE_FAILED;
- }
-
- for(seq = -1; seq < list->count;) {
- ssize_t mayEncode;
- if(seq < 0) seq = 0;
- if(ct && ct->effective_bits >= 0) {
- mayEncode = list->count;
- } else {
- mayEncode = uper_put_length(po, list->count - seq);
- if(mayEncode < 0) _ASN_ENCODE_FAILED;
- }
-
- while(mayEncode--) {
- void *memb_ptr = list->array[seq++];
- if(!memb_ptr) _ASN_ENCODE_FAILED;
- er = elm->type->uper_encoder(elm->type,
- elm->per_constraints, memb_ptr, po);
- if(er.encoded == -1)
- _ASN_ENCODE_FAILED;
- }
- }
-
- _ASN_ENCODED_OK(er);
-}
-
diff --git a/src/third_party/asn1/constr_SEQUENCE_OF.h b/src/third_party/asn1/constr_SEQUENCE_OF.h
deleted file mode 100644
index b75fe4e9..00000000
--- a/src/third_party/asn1/constr_SEQUENCE_OF.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*-
- * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#ifndef _CONSTR_SEQUENCE_OF_H_
-#define _CONSTR_SEQUENCE_OF_H_
-
-#include
-#include /* Implemented using SET OF */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /*
- * A set specialized functions dealing with the SEQUENCE OF type.
- * Generally implemented using SET OF.
- */
-#define SEQUENCE_OF_free SET_OF_free
-#define SEQUENCE_OF_print SET_OF_print
-#define SEQUENCE_OF_constraint SET_OF_constraint
-#define SEQUENCE_OF_decode_ber SET_OF_decode_ber
-#define SEQUENCE_OF_decode_xer SET_OF_decode_xer
-#define SEQUENCE_OF_decode_uper SET_OF_decode_uper
- der_type_encoder_f SEQUENCE_OF_encode_der;
- xer_type_encoder_f SEQUENCE_OF_encode_xer;
- per_type_encoder_f SEQUENCE_OF_encode_uper;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CONSTR_SET_OF_H_ */
diff --git a/src/third_party/asn1/constr_SET_OF.c b/src/third_party/asn1/constr_SET_OF.c
deleted file mode 100644
index e9ce4104..00000000
--- a/src/third_party/asn1/constr_SET_OF.c
+++ /dev/null
@@ -1,957 +0,0 @@
-/*-
- * Copyright (c) 2003, 2004, 2005 Lev Walkin .
- * All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-#include
-#include
-#include