Compare commits
23 Commits
0e8fe168ef
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
| 34b1cd2148 | |||
| c05621c508 | |||
| 149f18dea0 | |||
| b58c8df905 | |||
| 82d2e1b5f7 | |||
| 51ef6e182d | |||
| e17675d973 | |||
| 5f1d7038ac | |||
| 710772b052 | |||
| 4e62548091 | |||
| fbcaac95f5 | |||
| 3998726100 | |||
| 1f1c0afb9a | |||
| d1aff0212e | |||
| 0910b1e6c8 | |||
| 50c7f98c37 | |||
| 48373b6855 | |||
| 1d32854a09 | |||
| 7e26addd80 | |||
| 5053bfa9af | |||
| 557c04436d | |||
| f4ef52e154 | |||
| fe588e92f1 |
6
Makefile
6
Makefile
@ -56,13 +56,13 @@ build: check-env swag vendor only-build # Build a native version. Set e=environm
|
|||||||
|
|
||||||
only-build: check-env
|
only-build: check-env
|
||||||
@echo "Building for $(e) environment..."
|
@echo "Building for $(e) environment..."
|
||||||
env OUT_PATH=$(DEFAULT_OUT_PATH) tools/build.sh $(e)
|
env OUT_PATH=$(DEFAULT_OUT_PATH) GOARCH=amd64 GOOS=linux tools/build.sh $(e)
|
||||||
|
|
||||||
linux-build: check-env swag # Build a linux version for prod environment. Set e=environment: prod, dev, demo, open-demo
|
linux-build: check-env swag # Build a linux version for prod environment. Set e=environment: prod, dev, demo, open-demo
|
||||||
env OUT_PATH=$(DEFAULT_OUT_PATH) GOARCH=amd64 GOOS=linux tools/build.sh $(e)
|
env OUT_PATH=$(DEFAULT_OUT_PATH) GOARCH=amd64 GOOS=linux tools/build.sh $(e)
|
||||||
|
|
||||||
deploy: check-env # Deploy to remote server. Set e=environment: prod, dev, demo, open-demo
|
deploy: # Deploy to remote server. Set e=environment: prod, dev, demo, open-demo; s=serverName; i=instance; e.g. make deploy e=dev s=nonprodFix i=dpl
|
||||||
tools/deploy.sh $(e)
|
make build e=$(e) && qscp build/out/distribution/qfixdpl.gz $(s):/home/quantex/qfixtb/$(i)/
|
||||||
|
|
||||||
fmt: download-versions # Apply the Go formatter to the code
|
fmt: download-versions # Apply the Go formatter to the code
|
||||||
cd tools/check; unset GOPATH; GOBIN=$$PWD/../bin go install mvdan.cc/gofumpt@$(call get_version,gofumpt);
|
cd tools/check; unset GOPATH; GOBIN=$$PWD/../bin go install mvdan.cc/gofumpt@$(call get_version,gofumpt);
|
||||||
|
|||||||
341
docs/FLOW_8_4_LIST_TRADING.md
Normal file
341
docs/FLOW_8_4_LIST_TRADING.md
Normal file
@ -0,0 +1,341 @@
|
|||||||
|
# Flow 8.4 — List Trading (Dealer Response)
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Flow 8.4 defines how a **dealer** responds to a client's Request for Quote (RFQ) through Tradeweb (TW) in a List Trading context. The key rule is:
|
||||||
|
|
||||||
|
> **The dealer NEVER sends an ExecutionReport (35=8). Only Tradeweb does.**
|
||||||
|
|
||||||
|
The dealer's role is limited to:
|
||||||
|
- Acknowledging messages (35=AI QuoteStatusReport, 35=BN ExecutionAck)
|
||||||
|
- Sending a price quote (35=S)
|
||||||
|
|
||||||
|
This document covers the **happy path** (client accepts) and two **alternative flows**:
|
||||||
|
- **Flow 8.6 — Trade Ended:** Client cancels before or after receiving the quote
|
||||||
|
- **QuoteAck Rejected:** TW rejects the dealer's quote
|
||||||
|
|
||||||
|
## Participants
|
||||||
|
|
||||||
|
| Abbreviation | Role |
|
||||||
|
|---|---|
|
||||||
|
| **TW** | Tradeweb — the platform that orchestrates the trade |
|
||||||
|
| **Dealer** | Us — responds to RFQs with quotes and acknowledges TW messages |
|
||||||
|
| **Client** | The counterparty requesting a quote (we never communicate with them directly) |
|
||||||
|
|
||||||
|
## Message Flow
|
||||||
|
|
||||||
|
```
|
||||||
|
TW Dealer
|
||||||
|
│ │
|
||||||
|
│ 1. QuoteRequest (35=R) │
|
||||||
|
│ ─────────────────────────────────────────> │
|
||||||
|
│ │
|
||||||
|
│ 2. QuoteStatusReport (35=AI) [ACK] │
|
||||||
|
│ <───────────────────────────────────────── │
|
||||||
|
│ │
|
||||||
|
│ 3. Quote (35=S) [price] │
|
||||||
|
│ <───────────────────────────────────────── │
|
||||||
|
│ │
|
||||||
|
│ 4. QuoteAck (35=CW) [ACCEPTED] │
|
||||||
|
│ ─────────────────────────────────────────> │
|
||||||
|
│ │
|
||||||
|
│ 5. QuoteResponse (35=AJ) [Hit/Lift] │
|
||||||
|
│ ─────────────────────────────────────────> │
|
||||||
|
│ │
|
||||||
|
│ 6. QuoteStatusReport (35=AI) [TRDREQACK] │
|
||||||
|
│ <───────────────────────────────────────── │
|
||||||
|
│ │
|
||||||
|
│ 7. ExecutionReport (35=8) [_LISTEND] │
|
||||||
|
│ ─────────────────────────────────────────> │
|
||||||
|
│ │
|
||||||
|
│ 8. ExecutionAck (35=BN) │
|
||||||
|
│ <───────────────────────────────────────── │
|
||||||
|
│ │
|
||||||
|
│ 9. ExecutionReport (35=8) [_TRDEND] │
|
||||||
|
│ ─────────────────────────────────────────> │
|
||||||
|
│ │
|
||||||
|
│ 10. ExecutionAck (35=BN) │
|
||||||
|
│ <───────────────────────────────────────── │
|
||||||
|
│ │
|
||||||
|
│ 11. ExecutionReport (35=8) [_TRDSUMM] │
|
||||||
|
│ ─────────────────────────────────────────> │
|
||||||
|
│ │
|
||||||
|
│ 12. ExecutionAck (35=BN) │
|
||||||
|
│ <───────────────────────────────────────── │
|
||||||
|
│ │
|
||||||
|
```
|
||||||
|
|
||||||
|
## Step-by-Step Detail
|
||||||
|
|
||||||
|
### Step 1 — QuoteRequest (35=R) — TW → Dealer
|
||||||
|
|
||||||
|
TW sends an RFQ on behalf of the client. Key fields:
|
||||||
|
|
||||||
|
| Tag | Field | Example | Notes |
|
||||||
|
|-----|-------|---------|-------|
|
||||||
|
| 131 | QuoteReqID | `LST_20260316_BYMA_CORI_NY1567246.1_1` | Always starts with `LST_` for List Trading |
|
||||||
|
| 66 | ListID | `NY1567246.1` | Identifies the list/inquiry |
|
||||||
|
| 48 | SecurityID | `040114HT0` | Bond identifier |
|
||||||
|
| 22 | SecurityIDSource | `1` (CUSIP) | Could also be `4` (ISIN) |
|
||||||
|
| 54 | Side | `2` (SELL) | The client's side — if client sells, dealer buys |
|
||||||
|
| 38 | OrderQty | `10000` | Quantity requested |
|
||||||
|
| 15 | Currency | `USD` | Settlement currency |
|
||||||
|
| 64 | SettlDate | `20260317` | Settlement date |
|
||||||
|
| 20073 | NegotiationType | `RFQ` | Must be RFQ for this flow |
|
||||||
|
|
||||||
|
**Validation:** The dealer must verify `LST_` prefix, non-empty `ListID`, and `NegotiationType=RFQ` before proceeding.
|
||||||
|
|
||||||
|
### Step 2 — QuoteStatusReport (35=AI) — Dealer → TW
|
||||||
|
|
||||||
|
The dealer acknowledges receipt of the QuoteRequest.
|
||||||
|
|
||||||
|
| Tag | Field | Value |
|
||||||
|
|-----|-------|-------|
|
||||||
|
| 131 | QuoteReqID | Same as received |
|
||||||
|
| 117 | QuoteID | Same as QuoteReqID |
|
||||||
|
| 297 | QuoteStatus | `0` (ACCEPTED) |
|
||||||
|
|
||||||
|
### Step 3 — Quote (35=S) — Dealer → TW
|
||||||
|
|
||||||
|
The dealer sends a price quote.
|
||||||
|
|
||||||
|
| Tag | Field | Example | Notes |
|
||||||
|
|-----|-------|---------|-------|
|
||||||
|
| 117 | QuoteID | Same as QuoteReqID | |
|
||||||
|
| 131 | QuoteReqID | Same as received | |
|
||||||
|
| 132 | BidPx | `99.60000000` | Set when client side is SELL (dealer bids) |
|
||||||
|
| 133 | OfferPx | `99.60000000` | Set when client side is BUY (dealer offers) |
|
||||||
|
| 44 | Price | `99.60000000` | The quote price |
|
||||||
|
| 423 | PriceType | `1` (Percentage) | |
|
||||||
|
| 537 | QuoteType | `211` (SEND_QUOTE) | |
|
||||||
|
|
||||||
|
### Step 4 — QuoteAck (35=CW) — TW → Dealer
|
||||||
|
|
||||||
|
TW confirms the quote was accepted.
|
||||||
|
|
||||||
|
| Tag | Field | Value |
|
||||||
|
|-----|-------|-------|
|
||||||
|
| 1865 | QuoteAckStatus | `1` (ACCEPTED) |
|
||||||
|
|
||||||
|
**Note:** If status is not ACCEPTED, the dealer logs the rejection (including the `Text` field) and cleans up the trade from memory. See [QuoteAck Rejected](#quoteack-rejected-quote-not-accepted) below.
|
||||||
|
|
||||||
|
### Step 5 — QuoteResponse (35=AJ) — TW → Dealer
|
||||||
|
|
||||||
|
The client has decided to trade (Hit/Lift the quote).
|
||||||
|
|
||||||
|
| Tag | Field | Value | Notes |
|
||||||
|
|-----|-------|-------|-------|
|
||||||
|
| 694 | QuoteRespType | `1` (Hit/Lift) | `2` would be Counter — that's flow 8.5, not handled here |
|
||||||
|
| 693 | QuoteRespID | `..._TRDREQ` | Always ends with `_TRDREQ` |
|
||||||
|
|
||||||
|
### Step 6 — QuoteStatusReport (35=AI) — Dealer → TW
|
||||||
|
|
||||||
|
The dealer acknowledges the trade request (TRDREQACK).
|
||||||
|
|
||||||
|
| Tag | Field | Value |
|
||||||
|
|-----|-------|-------|
|
||||||
|
| 131 | QuoteReqID | Same as received |
|
||||||
|
| 693 | QuoteRespID | Same as received |
|
||||||
|
| 297 | QuoteStatus | `0` (ACCEPTED) |
|
||||||
|
|
||||||
|
### Step 7 — ExecutionReport (35=8) `_LISTEND` — TW → Dealer
|
||||||
|
|
||||||
|
TW signals that the due-in window for the list has closed.
|
||||||
|
|
||||||
|
| Tag | Field | Value | Notes |
|
||||||
|
|-----|-------|-------|-------|
|
||||||
|
| 17 | ExecID | `..._LISTEND-{timestamp}` | Contains `_LISTEND` |
|
||||||
|
| 150 | ExecType | `A` (PendingNew) | |
|
||||||
|
| 39 | OrdStatus | `A` (PendingNew) | |
|
||||||
|
|
||||||
|
**Dealer action:** Send ExecutionAck only. **Do NOT send an ExecutionReport back.**
|
||||||
|
|
||||||
|
### Step 8 — ExecutionAck (35=BN) — Dealer → TW
|
||||||
|
|
||||||
|
| Tag | Field | Value |
|
||||||
|
|-----|-------|-------|
|
||||||
|
| 37 | OrderID | Same as received |
|
||||||
|
| 17 | ExecID | Same as received |
|
||||||
|
| 1036 | ExecAckStatus | `1` (ACCEPTED) |
|
||||||
|
|
||||||
|
### Step 9 — ExecutionReport (35=8) `_TRDEND` — TW → Dealer
|
||||||
|
|
||||||
|
TW sends the trade result.
|
||||||
|
|
||||||
|
| Tag | Field | Value | Notes |
|
||||||
|
|-----|-------|-------|-------|
|
||||||
|
| 17 | ExecID | `..._TRDEND-{timestamp}` | Contains `_TRDEND` |
|
||||||
|
| 150 | ExecType | `F` (Trade) | The trade was executed |
|
||||||
|
| 39 | OrdStatus | `2` (Filled) | |
|
||||||
|
| 44 | Price | `99.6` | Final execution price |
|
||||||
|
|
||||||
|
**Dealer action:** Send ExecutionAck. Clean up internal trade tracking state.
|
||||||
|
|
||||||
|
### Step 10 — ExecutionAck (35=BN) — Dealer → TW
|
||||||
|
|
||||||
|
Same format as Step 8.
|
||||||
|
|
||||||
|
### Step 11 — ExecutionReport (35=8) `_TRDSUMM` — TW → Dealer
|
||||||
|
|
||||||
|
TW sends the full trade summary with additional details (parties, settlement info, trade IDs).
|
||||||
|
|
||||||
|
| Tag | Field | Value | Notes |
|
||||||
|
|-----|-------|-------|-------|
|
||||||
|
| 17 | ExecID | `..._TRDSUMM-{timestamp}` | Contains `_TRDSUMM` |
|
||||||
|
| 150 | ExecType | `F` (Trade) | |
|
||||||
|
| 39 | OrdStatus | `2` (Filled) | |
|
||||||
|
| 453 | NoPartyIDs | Party information | Counterparty details |
|
||||||
|
| 526 | SecondaryClOrdID | `TRD_...` | Tradeweb trade reference |
|
||||||
|
| 1003 | TradeID | `20260316.BYMA.CORI.230` | Unique trade identifier |
|
||||||
|
|
||||||
|
**Dealer action:** Send ExecutionAck. Log the summary for audit/reconciliation.
|
||||||
|
|
||||||
|
### Step 12 — ExecutionAck (35=BN) — Dealer → TW
|
||||||
|
|
||||||
|
Same format as Step 8.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Alternative Flows
|
||||||
|
|
||||||
|
### Flow 8.6 — Trade Ended (Client Cancels)
|
||||||
|
|
||||||
|
The client changes their mind and ends the trade. This can happen at any point after the QuoteRequest — even before the dealer's quote arrives. TW informs the dealer via QuoteResponse (35=AJ) messages with `_TRDEND` and `_TRDSUMM` suffixes instead of the ExecutionReport chain.
|
||||||
|
|
||||||
|
> **Critical:** The dealer MUST send a QuoteStatusReport (35=AI) ACK for every QuoteResponse. If no ACK is sent, TW will retry the message indefinitely (~every 11 seconds).
|
||||||
|
|
||||||
|
```
|
||||||
|
TW Dealer
|
||||||
|
│ │
|
||||||
|
│ 1. QuoteRequest (35=R) │
|
||||||
|
│ ─────────────────────────────────────────> │
|
||||||
|
│ │
|
||||||
|
│ 2. QuoteStatusReport (35=AI) [ACK] │
|
||||||
|
│ <───────────────────────────────────────── │
|
||||||
|
│ │
|
||||||
|
│ ┌─── Client ends trade ───┐ │
|
||||||
|
│ │ Meanwhile, dealer may │ │
|
||||||
|
│ │ still send Quote (S) │ │
|
||||||
|
│ └─────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
│ 3. QuoteResponse (35=AJ) [_TRDEND] │
|
||||||
|
│ QuoteRespType=7 (End Trade) │
|
||||||
|
│ ─────────────────────────────────────────> │
|
||||||
|
│ │
|
||||||
|
│ 4. QuoteStatusReport (35=AI) [ACK] │
|
||||||
|
│ <───────────────────────────────────────── │
|
||||||
|
│ │
|
||||||
|
│ 5. QuoteAck (35=CW) [REJECTED] │
|
||||||
|
│ (if quote was sent, TW rejects it) │
|
||||||
|
│ ─────────────────────────────────────────> │
|
||||||
|
│ │
|
||||||
|
│ 6. QuoteResponse (35=AJ) [_TRDSUMM] │
|
||||||
|
│ QuoteRespType=7, TradeSummary=Y │
|
||||||
|
│ ─────────────────────────────────────────> │
|
||||||
|
│ │
|
||||||
|
│ 7. QuoteStatusReport (35=AI) [ACK] │
|
||||||
|
│ <───────────────────────────────────────── │
|
||||||
|
│ │
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Step 3 — QuoteResponse (35=AJ) `_TRDEND` — TW → Dealer
|
||||||
|
|
||||||
|
TW notifies that the client ended the trade.
|
||||||
|
|
||||||
|
| Tag | Field | Value | Notes |
|
||||||
|
|-----|-------|-------|-------|
|
||||||
|
| 693 | QuoteRespID | `..._TRDEND` | Suffix identifies this as trade end |
|
||||||
|
| 694 | QuoteRespType | `7` (End Trade) | |
|
||||||
|
| 131 | QuoteReqID | Same as original | |
|
||||||
|
|
||||||
|
**Dealer action:** Send QuoteStatusReport (35=AI) with `693=QuoteRespID` and `297=0` (ACCEPTED).
|
||||||
|
|
||||||
|
#### Step 5 — QuoteAck (35=CW) `REJECTED` — TW → Dealer
|
||||||
|
|
||||||
|
If the dealer's Quote (35=S) crossed with the TRDEND, TW rejects it. The QuoteAckStatus will be `2` (REJECTED) with a text like "DPL DLRQUOTE received in an invalid state."
|
||||||
|
|
||||||
|
**Dealer action:** Log the rejection and clean up the trade from memory.
|
||||||
|
|
||||||
|
#### Step 6 — QuoteResponse (35=AJ) `_TRDSUMM` — TW → Dealer
|
||||||
|
|
||||||
|
TW sends the final trade summary confirming the outcome.
|
||||||
|
|
||||||
|
| Tag | Field | Value | Notes |
|
||||||
|
|-----|-------|-------|-------|
|
||||||
|
| 693 | QuoteRespID | `..._TRDSUMM` | Final summary message |
|
||||||
|
| 694 | QuoteRespType | `7` (End Trade) | |
|
||||||
|
| 22636 | TradeSummary | `Y` | Confirms this is the summary |
|
||||||
|
|
||||||
|
**Dealer action:** Send QuoteStatusReport (35=AI) ACK. Clean up the trade from memory. This is the **terminal message** — no more messages will follow for this QuoteReqID.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### QuoteAck Rejected (Quote Not Accepted)
|
||||||
|
|
||||||
|
If TW rejects the dealer's Quote (35=CW with status != ACCEPTED), the trade is dead from the dealer's perspective.
|
||||||
|
|
||||||
|
```
|
||||||
|
TW Dealer
|
||||||
|
│ │
|
||||||
|
│ 1-3. (same as happy path) │
|
||||||
|
│ │
|
||||||
|
│ 4. QuoteAck (35=CW) [REJECTED] │
|
||||||
|
│ QuoteAckStatus != 1 │
|
||||||
|
│ ─────────────────────────────────────────> │
|
||||||
|
│ │
|
||||||
|
│ Trade is terminated. │
|
||||||
|
│ │
|
||||||
|
```
|
||||||
|
|
||||||
|
**Dealer action:** Log the rejection (including the `Text` field with the reason) and remove the trade from memory. No further action needed — TW may or may not send subsequent messages for this QuoteReqID.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## QuoteRespID Suffix Routing in `handleQuoteResponse`
|
||||||
|
|
||||||
|
All QuoteResponse (35=AJ) messages are routed by the suffix of the `QuoteRespID` (tag 693):
|
||||||
|
|
||||||
|
```
|
||||||
|
QuoteRespID ends with "_TRDREQ" → Trade request (flow 8.4 happy path) — ACK
|
||||||
|
QuoteRespID ends with "_TRDEND" → Trade ended by client (flow 8.6) — ACK
|
||||||
|
QuoteRespID ends with "_TRDSUMM" → Trade summary (flow 8.6 final) — ACK + cleanup
|
||||||
|
QuoteRespID ends with "_LISTEND" → List ended — ACK
|
||||||
|
Other suffix → Ignored (logged)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Code Reference
|
||||||
|
|
||||||
|
The implementation lives in `src/client/fix/manager.go`:
|
||||||
|
|
||||||
|
| Handler | Triggers on | Action |
|
||||||
|
|---------|------------|--------|
|
||||||
|
| `handleQuoteRequest` | 35=R | Sends 35=AI (ack) + 35=S (quote) |
|
||||||
|
| `handleQuoteAck` | 35=CW | If rejected: logs + cleans up trade. If accepted: logs |
|
||||||
|
| `handleQuoteResponse` | 35=AJ | Sends 35=AI (ACK). Routes by QuoteRespID suffix. Cleans up on `_TRDSUMM` |
|
||||||
|
| `handleExecutionReport` | 35=8 | Sends 35=BN (ack) + routes by ExecID suffix |
|
||||||
|
| `sendQuoteStatusReport` | — | Builds 35=AI for QuoteRequest ack |
|
||||||
|
| `sendTradeRequestAck` | — | Builds 35=AI for QuoteResponse ack (all suffixes) |
|
||||||
|
| `sendExecutionAck` | — | Builds 35=BN for ExecutionReport ack |
|
||||||
|
|
||||||
|
### ExecID Routing in `handleExecutionReport`
|
||||||
|
|
||||||
|
```
|
||||||
|
ExecID contains "_LISTEND" → Log only, await trade result
|
||||||
|
ExecID contains "_TRDEND" → Log trade end
|
||||||
|
ExecID contains "_TRDSUMM" → Log trade summary + cleanup trade from memory
|
||||||
|
ExecType = F (fallback) → Log generic trade result
|
||||||
|
```
|
||||||
|
|
||||||
|
The order matters: ExecID suffix checks run before ExecType checks, because `_TRDEND` and `_TRDSUMM` both have `ExecType=F`.
|
||||||
|
|
||||||
|
### Trade Cleanup Paths
|
||||||
|
|
||||||
|
A trade is removed from memory in any of these scenarios:
|
||||||
|
|
||||||
|
| Trigger | Message | Condition |
|
||||||
|
|---------|---------|-----------|
|
||||||
|
| QuoteAck rejected | 35=CW | `QuoteAckStatus != ACCEPTED` |
|
||||||
|
| QuoteResponse summary | 35=AJ | `QuoteRespID` ends with `_TRDSUMM` (flow 8.6) |
|
||||||
|
| ExecutionReport summary | 35=8 | `ExecID` contains `_TRDSUMM` (flow 8.4) |
|
||||||
|
|
||||||
|
The `loadActiveTrades` recovery function replays today's messages and applies the same cleanup rules to reconstruct accurate state on restart.
|
||||||
15
fix.cfg
Normal file
15
fix.cfg
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
ConnectionType=acceptor
|
||||||
|
HeartBtInt=30
|
||||||
|
SenderCompID=QUANTEX
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileStorePath=fix_store
|
||||||
|
FileLogPath=fix_logs
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIXT.1.1
|
||||||
|
DefaultApplVerID=FIX.5.0SP2
|
||||||
|
TargetCompID=CLIENT
|
||||||
|
StartTime=00:00:00
|
||||||
|
EndTime=00:00:00
|
||||||
|
SocketAcceptPort=5001
|
||||||
22
go.mod
22
go.mod
@ -8,17 +8,34 @@ require (
|
|||||||
github.com/gin-gonic/gin v1.10.0
|
github.com/gin-gonic/gin v1.10.0
|
||||||
github.com/golang-jwt/jwt/v5 v5.3.0
|
github.com/golang-jwt/jwt/v5 v5.3.0
|
||||||
github.com/gomodule/redigo v1.9.2
|
github.com/gomodule/redigo v1.9.2
|
||||||
|
github.com/mattn/go-sqlite3 v1.14.34
|
||||||
github.com/mitchellh/panicwrap v1.0.0
|
github.com/mitchellh/panicwrap v1.0.0
|
||||||
|
github.com/quagmt/udecimal v1.10.0
|
||||||
github.com/rs/zerolog v1.15.0
|
github.com/rs/zerolog v1.15.0
|
||||||
github.com/sasha-s/go-deadlock v0.3.5
|
github.com/sasha-s/go-deadlock v0.3.5
|
||||||
github.com/satori/go.uuid v1.2.0
|
github.com/satori/go.uuid v1.2.0
|
||||||
github.com/shopspring/decimal v1.4.0
|
github.com/shopspring/decimal v1.4.0
|
||||||
|
github.com/stretchr/testify v1.9.0
|
||||||
github.com/swaggo/files v1.0.1
|
github.com/swaggo/files v1.0.1
|
||||||
github.com/swaggo/gin-swagger v1.6.0
|
github.com/swaggo/gin-swagger v1.6.0
|
||||||
github.com/swaggo/swag v1.16.4
|
github.com/swaggo/swag v1.16.4
|
||||||
|
go.mongodb.org/mongo-driver v1.17.9
|
||||||
quantex.com.ar/multidb v1.2.2
|
quantex.com.ar/multidb v1.2.2
|
||||||
)
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
||||||
|
github.com/golang/snappy v0.0.4 // indirect
|
||||||
|
github.com/klauspost/compress v1.17.9 // indirect
|
||||||
|
github.com/montanaflynn/stats v0.7.1 // indirect
|
||||||
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||||
|
github.com/stretchr/objx v0.5.2 // indirect
|
||||||
|
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
|
||||||
|
github.com/xdg-go/scram v1.1.2 // indirect
|
||||||
|
github.com/xdg-go/stringprep v1.0.4 // indirect
|
||||||
|
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect
|
||||||
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/KyleBanks/depth v1.2.1 // indirect
|
github.com/KyleBanks/depth v1.2.1 // indirect
|
||||||
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect
|
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect
|
||||||
@ -72,7 +89,8 @@ require (
|
|||||||
github.com/o1egl/paseto v1.0.0 // indirect
|
github.com/o1egl/paseto v1.0.0 // indirect
|
||||||
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
|
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
|
||||||
github.com/petermattis/goid v0.0.0-20241025130422-66cb2e6d7274 // indirect
|
github.com/petermattis/goid v0.0.0-20241025130422-66cb2e6d7274 // indirect
|
||||||
github.com/pkg/errors v0.9.1 // indirect
|
github.com/pires/go-proxyproto v0.11.0
|
||||||
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/prometheus/client_golang v1.20.5 // indirect
|
github.com/prometheus/client_golang v1.20.5 // indirect
|
||||||
github.com/prometheus/client_model v0.6.1 // indirect
|
github.com/prometheus/client_model v0.6.1 // indirect
|
||||||
github.com/prometheus/common v0.60.1 // indirect
|
github.com/prometheus/common v0.60.1 // indirect
|
||||||
@ -94,7 +112,7 @@ require (
|
|||||||
golang.org/x/arch v0.12.0 // indirect
|
golang.org/x/arch v0.12.0 // indirect
|
||||||
golang.org/x/crypto v0.45.0 // indirect
|
golang.org/x/crypto v0.45.0 // indirect
|
||||||
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect
|
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect
|
||||||
golang.org/x/net v0.47.0 // indirect
|
golang.org/x/net v0.47.0
|
||||||
golang.org/x/sync v0.18.0 // indirect
|
golang.org/x/sync v0.18.0 // indirect
|
||||||
golang.org/x/sys v0.38.0 // indirect
|
golang.org/x/sys v0.38.0 // indirect
|
||||||
golang.org/x/term v0.37.0 // indirect
|
golang.org/x/term v0.37.0 // indirect
|
||||||
|
|||||||
250
go.sum
250
go.sum
@ -1,136 +1,11 @@
|
|||||||
cel.dev/expr v0.16.1/go.mod h1:AsGA5zb3WruAEQeQng1RZdGEXmBj0jvMWh6l5SnNuC8=
|
|
||||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
cloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U=
|
|
||||||
cloud.google.com/go/accessapproval v1.8.2/go.mod h1:aEJvHZtpjqstffVwF/2mCXXSQmpskyzvw6zKLvLutZM=
|
|
||||||
cloud.google.com/go/accesscontextmanager v1.9.2/go.mod h1:T0Sw/PQPyzctnkw1pdmGAKb7XBA84BqQzH0fSU7wzJU=
|
|
||||||
cloud.google.com/go/aiplatform v1.68.0/go.mod h1:105MFA3svHjC3Oazl7yjXAmIR89LKhRAeNdnDKJczME=
|
|
||||||
cloud.google.com/go/analytics v0.25.2/go.mod h1:th0DIunqrhI1ZWVlT3PH2Uw/9ANX8YHfFDEPqf/+7xM=
|
|
||||||
cloud.google.com/go/apigateway v1.7.2/go.mod h1:+weId+9aR9J6GRwDka7jIUSrKEX60XGcikX7dGU8O7M=
|
|
||||||
cloud.google.com/go/apigeeconnect v1.7.2/go.mod h1:he/SWi3A63fbyxrxD6jb67ak17QTbWjva1TFbT5w8Kw=
|
|
||||||
cloud.google.com/go/apigeeregistry v0.9.2/go.mod h1:A5n/DwpG5NaP2fcLYGiFA9QfzpQhPRFNATO1gie8KM8=
|
|
||||||
cloud.google.com/go/appengine v1.9.2/go.mod h1:bK4dvmMG6b5Tem2JFZcjvHdxco9g6t1pwd3y/1qr+3s=
|
|
||||||
cloud.google.com/go/area120 v0.9.2/go.mod h1:Ar/KPx51UbrTWGVGgGzFnT7hFYQuk/0VOXkvHdTbQMI=
|
|
||||||
cloud.google.com/go/artifactregistry v1.16.0/go.mod h1:LunXo4u2rFtvJjrGjO0JS+Gs9Eco2xbZU6JVJ4+T8Sk=
|
|
||||||
cloud.google.com/go/asset v1.20.3/go.mod h1:797WxTDwdnFAJzbjZ5zc+P5iwqXc13yO9DHhmS6wl+o=
|
|
||||||
cloud.google.com/go/assuredworkloads v1.12.2/go.mod h1:/WeRr/q+6EQYgnoYrqCVgw7boMoDfjXZZev3iJxs2Iw=
|
|
||||||
cloud.google.com/go/automl v1.14.2/go.mod h1:mIat+Mf77W30eWQ/vrhjXsXaRh8Qfu4WiymR0hR6Uxk=
|
|
||||||
cloud.google.com/go/baremetalsolution v1.3.2/go.mod h1:3+wqVRstRREJV/puwaKAH3Pnn7ByreZG2aFRsavnoBQ=
|
|
||||||
cloud.google.com/go/batch v1.11.2/go.mod h1:ehsVs8Y86Q4K+qhEStxICqQnNqH8cqgpCxx89cmU5h4=
|
|
||||||
cloud.google.com/go/beyondcorp v1.1.2/go.mod h1:q6YWSkEsSZTU2WDt1qtz6P5yfv79wgktGtNbd0FJTLI=
|
|
||||||
cloud.google.com/go/bigquery v1.64.0/go.mod h1:gy8Ooz6HF7QmA+TRtX8tZmXBKH5mCFBwUApGAb3zI7Y=
|
|
||||||
cloud.google.com/go/bigtable v1.33.0/go.mod h1:HtpnH4g25VT1pejHRtInlFPnN5sjTxbQlsYBjh9t5l0=
|
|
||||||
cloud.google.com/go/billing v1.19.2/go.mod h1:AAtih/X2nka5mug6jTAq8jfh1nPye0OjkHbZEZgU59c=
|
|
||||||
cloud.google.com/go/binaryauthorization v1.9.2/go.mod h1:T4nOcRWi2WX4bjfSRXJkUnpliVIqjP38V88Z10OvEv4=
|
|
||||||
cloud.google.com/go/certificatemanager v1.9.2/go.mod h1:PqW+fNSav5Xz8bvUnJpATIRo1aaABP4mUg/7XIeAn6c=
|
|
||||||
cloud.google.com/go/channel v1.19.1/go.mod h1:ungpP46l6XUeuefbA/XWpWWnAY3897CSRPXUbDstwUo=
|
|
||||||
cloud.google.com/go/cloudbuild v1.19.0/go.mod h1:ZGRqbNMrVGhknIIjwASa6MqoRTOpXIVMSI+Ew5DMPuY=
|
|
||||||
cloud.google.com/go/clouddms v1.8.2/go.mod h1:pe+JSp12u4mYOkwXpSMouyCCuQHL3a6xvWH2FgOcAt4=
|
|
||||||
cloud.google.com/go/cloudtasks v1.13.2/go.mod h1:2pyE4Lhm7xY8GqbZKLnYk7eeuh8L0JwAvXx1ecKxYu8=
|
|
||||||
cloud.google.com/go/compute v1.28.3/go.mod h1:HFlsDurE5DpQZClAGf/cYh+gxssMhBxBovZDYkEn/Og=
|
|
||||||
cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY=
|
|
||||||
cloud.google.com/go/contactcenterinsights v1.15.1/go.mod h1:cFGxDVm/OwEVAHbU9UO4xQCtQFn0RZSrSUcF/oJ0Bbs=
|
|
||||||
cloud.google.com/go/container v1.41.0/go.mod h1:YL6lDgCUi3frIWNIFU9qrmF7/6K1EYrtspmFTyyqJ+k=
|
|
||||||
cloud.google.com/go/containeranalysis v0.13.2/go.mod h1:AiKvXJkc3HiqkHzVIt6s5M81wk+q7SNffc6ZlkTDgiE=
|
|
||||||
cloud.google.com/go/datacatalog v1.22.2/go.mod h1:9Wamq8TDfL2680Sav7q3zEhBJSPBrDxJU8WtPJ25dBM=
|
|
||||||
cloud.google.com/go/dataflow v0.10.2/go.mod h1:+HIb4HJxDCZYuCqDGnBHZEglh5I0edi/mLgVbxDf0Ag=
|
|
||||||
cloud.google.com/go/dataform v0.10.2/go.mod h1:oZHwMBxG6jGZCVZqqMx+XWXK+dA/ooyYiyeRbUxI15M=
|
|
||||||
cloud.google.com/go/datafusion v1.8.2/go.mod h1:XernijudKtVG/VEvxtLv08COyVuiYPraSxm+8hd4zXA=
|
|
||||||
cloud.google.com/go/datalabeling v0.9.2/go.mod h1:8me7cCxwV/mZgYWtRAd3oRVGFD6UyT7hjMi+4GRyPpg=
|
|
||||||
cloud.google.com/go/dataplex v1.19.2/go.mod h1:vsxxdF5dgk3hX8Ens9m2/pMNhQZklUhSgqTghZtF1v4=
|
|
||||||
cloud.google.com/go/dataproc/v2 v2.10.0/go.mod h1:HD16lk4rv2zHFhbm8gGOtrRaFohMDr9f0lAUMLmg1PM=
|
|
||||||
cloud.google.com/go/dataqna v0.9.2/go.mod h1:WCJ7pwD0Mi+4pIzFQ+b2Zqy5DcExycNKHuB+VURPPgs=
|
|
||||||
cloud.google.com/go/datastore v1.20.0/go.mod h1:uFo3e+aEpRfHgtp5pp0+6M0o147KoPaYNaPAKpfh8Ew=
|
|
||||||
cloud.google.com/go/datastream v1.11.2/go.mod h1:RnFWa5zwR5SzHxeZGJOlQ4HKBQPcjGfD219Qy0qfh2k=
|
|
||||||
cloud.google.com/go/deploy v1.24.0/go.mod h1:h9uVCWxSDanXUereI5WR+vlZdbPJ6XGy+gcfC25v5rM=
|
|
||||||
cloud.google.com/go/dialogflow v1.59.0/go.mod h1:PjsrI+d2FI4BlGThxL0+Rua/g9vLI+2A1KL7s/Vo3pY=
|
|
||||||
cloud.google.com/go/dlp v1.20.0/go.mod h1:nrGsA3r8s7wh2Ct9FWu69UjBObiLldNyQda2RCHgdaY=
|
|
||||||
cloud.google.com/go/documentai v1.35.0/go.mod h1:ZotiWUlDE8qXSUqkJsGMQqVmfTMYATwJEYqbPXTR9kk=
|
|
||||||
cloud.google.com/go/domains v0.10.2/go.mod h1:oL0Wsda9KdJvvGNsykdalHxQv4Ri0yfdDkIi3bzTUwk=
|
|
||||||
cloud.google.com/go/edgecontainer v1.4.0/go.mod h1:Hxj5saJT8LMREmAI9tbNTaBpW5loYiWFyisCjDhzu88=
|
|
||||||
cloud.google.com/go/errorreporting v0.3.1/go.mod h1:6xVQXU1UuntfAf+bVkFk6nld41+CPyF2NSPCyXE3Ztk=
|
|
||||||
cloud.google.com/go/essentialcontacts v1.7.2/go.mod h1:NoCBlOIVteJFJU+HG9dIG/Cc9kt1K9ys9mbOaGPUmPc=
|
|
||||||
cloud.google.com/go/eventarc v1.15.0/go.mod h1:PAd/pPIZdJtJQFJI1yDEUms1mqohdNuM1BFEVHHlVFg=
|
|
||||||
cloud.google.com/go/filestore v1.9.2/go.mod h1:I9pM7Hoetq9a7djC1xtmtOeHSUYocna09ZP6x+PG1Xw=
|
|
||||||
cloud.google.com/go/firestore v1.17.0/go.mod h1:69uPx1papBsY8ZETooc71fOhoKkD70Q1DwMrtKuOT/Y=
|
|
||||||
cloud.google.com/go/functions v1.19.2/go.mod h1:SBzWwWuaFDLnUyStDAMEysVN1oA5ECLbP3/PfJ9Uk7Y=
|
|
||||||
cloud.google.com/go/gkebackup v1.6.2/go.mod h1:WsTSWqKJkGan1pkp5dS30oxb+Eaa6cLvxEUxKTUALwk=
|
|
||||||
cloud.google.com/go/gkeconnect v0.11.2/go.mod h1:+Sj47chrbFMON1wjG6DA4KJKi85/7ON7GQZXEo0cbaQ=
|
|
||||||
cloud.google.com/go/gkehub v0.15.2/go.mod h1:8YziTOpwbM8LM3r9cHaOMy2rNgJHXZCrrmGgcau9zbQ=
|
|
||||||
cloud.google.com/go/gkemulticloud v1.4.1/go.mod h1:KRvPYcx53bztNwNInrezdfNF+wwUom8Y3FuJBwhvFpQ=
|
|
||||||
cloud.google.com/go/gsuiteaddons v1.7.2/go.mod h1:GD32J2rN/4APilqZw4JKmwV84+jowYYMkEVwQEYuAWc=
|
|
||||||
cloud.google.com/go/iam v1.2.2/go.mod h1:0Ys8ccaZHdI1dEUilwzqng/6ps2YB6vRsjIe00/+6JY=
|
|
||||||
cloud.google.com/go/iap v1.10.2/go.mod h1:cClgtI09VIfazEK6VMJr6bX8KQfuQ/D3xqX+d0wrUlI=
|
|
||||||
cloud.google.com/go/ids v1.5.2/go.mod h1:P+ccDD96joXlomfonEdCnyrHvE68uLonc7sJBPVM5T0=
|
|
||||||
cloud.google.com/go/iot v1.8.2/go.mod h1:UDwVXvRD44JIcMZr8pzpF3o4iPsmOO6fmbaIYCAg1ww=
|
|
||||||
cloud.google.com/go/kms v1.20.1/go.mod h1:LywpNiVCvzYNJWS9JUcGJSVTNSwPwi0vBAotzDqn2nc=
|
|
||||||
cloud.google.com/go/language v1.14.2/go.mod h1:dviAbkxT9art+2ioL9AM05t+3Ql6UPfMpwq1cDsF+rg=
|
|
||||||
cloud.google.com/go/lifesciences v0.10.2/go.mod h1:vXDa34nz0T/ibUNoeHnhqI+Pn0OazUTdxemd0OLkyoY=
|
|
||||||
cloud.google.com/go/logging v1.12.0/go.mod h1:wwYBt5HlYP1InnrtYI0wtwttpVU1rifnMT7RejksUAM=
|
|
||||||
cloud.google.com/go/longrunning v0.6.2/go.mod h1:k/vIs83RN4bE3YCswdXC5PFfWVILjm3hpEUlSko4PiI=
|
|
||||||
cloud.google.com/go/managedidentities v1.7.2/go.mod h1:t0WKYzagOoD3FNtJWSWcU8zpWZz2i9cw2sKa9RiPx5I=
|
|
||||||
cloud.google.com/go/maps v1.14.1/go.mod h1:ZFqZS04ucwFiHSNU8TBYDUr3wYhj5iBFJk24Ibvpf3o=
|
|
||||||
cloud.google.com/go/mediatranslation v0.9.2/go.mod h1:1xyRoDYN32THzy+QaU62vIMciX0CFexplju9t30XwUc=
|
|
||||||
cloud.google.com/go/memcache v1.11.2/go.mod h1:jIzHn79b0m5wbkax2SdlW5vNSbpaEk0yWHbeLpMIYZE=
|
|
||||||
cloud.google.com/go/metastore v1.14.2/go.mod h1:dk4zOBhZIy3TFOQlI8sbOa+ef0FjAcCHEnd8dO2J+LE=
|
|
||||||
cloud.google.com/go/monitoring v1.21.2/go.mod h1:hS3pXvaG8KgWTSz+dAdyzPrGUYmi2Q+WFX8g2hqVEZU=
|
|
||||||
cloud.google.com/go/networkconnectivity v1.15.2/go.mod h1:N1O01bEk5z9bkkWwXLKcN2T53QN49m/pSpjfUvlHDQY=
|
|
||||||
cloud.google.com/go/networkmanagement v1.15.0/go.mod h1:Yc905R9U5jik5YMt76QWdG5WqzPU4ZsdI/mLnVa62/Q=
|
|
||||||
cloud.google.com/go/networksecurity v0.10.2/go.mod h1:puU3Gwchd6Y/VTyMkL50GI2RSRMS3KXhcDBY1HSOcck=
|
|
||||||
cloud.google.com/go/notebooks v1.12.2/go.mod h1:EkLwv8zwr8DUXnvzl944+sRBG+b73HEKzV632YYAGNI=
|
|
||||||
cloud.google.com/go/optimization v1.7.2/go.mod h1:msYgDIh1SGSfq6/KiWJQ/uxMkWq8LekPyn1LAZ7ifNE=
|
|
||||||
cloud.google.com/go/orchestration v1.11.1/go.mod h1:RFHf4g88Lbx6oKhwFstYiId2avwb6oswGeAQ7Tjjtfw=
|
|
||||||
cloud.google.com/go/orgpolicy v1.14.1/go.mod h1:1z08Hsu1mkoH839X7C8JmnrqOkp2IZRSxiDw7W/Xpg4=
|
|
||||||
cloud.google.com/go/osconfig v1.14.2/go.mod h1:kHtsm0/j8ubyuzGciBsRxFlbWVjc4c7KdrwJw0+g+pQ=
|
|
||||||
cloud.google.com/go/oslogin v1.14.2/go.mod h1:M7tAefCr6e9LFTrdWRQRrmMeKHbkvc4D9g6tHIjHySA=
|
|
||||||
cloud.google.com/go/phishingprotection v0.9.2/go.mod h1:mSCiq3tD8fTJAuXq5QBHFKZqMUy8SfWsbUM9NpzJIRQ=
|
|
||||||
cloud.google.com/go/policytroubleshooter v1.11.2/go.mod h1:1TdeCRv8Qsjcz2qC3wFltg/Mjga4HSpv8Tyr5rzvPsw=
|
|
||||||
cloud.google.com/go/privatecatalog v0.10.2/go.mod h1:o124dHoxdbO50ImR3T4+x3GRwBSTf4XTn6AatP8MgsQ=
|
|
||||||
cloud.google.com/go/pubsub v1.45.1/go.mod h1:3bn7fTmzZFwaUjllitv1WlsNMkqBgGUb3UdMhI54eCc=
|
|
||||||
cloud.google.com/go/pubsublite v1.8.2/go.mod h1:4r8GSa9NznExjuLPEJlF1VjOPOpgf3IT6k8x/YgaOPI=
|
|
||||||
cloud.google.com/go/recaptchaenterprise/v2 v2.18.0/go.mod h1:vnbA2SpVPPwKeoFrCQxR+5a0JFRRytwBBG69Zj9pGfk=
|
|
||||||
cloud.google.com/go/recommendationengine v0.9.2/go.mod h1:DjGfWZJ68ZF5ZuNgoTVXgajFAG0yLt4CJOpC0aMK3yw=
|
|
||||||
cloud.google.com/go/recommender v1.13.2/go.mod h1:XJau4M5Re8F4BM+fzF3fqSjxNJuM66fwF68VCy/ngGE=
|
|
||||||
cloud.google.com/go/redis v1.17.2/go.mod h1:h071xkcTMnJgQnU/zRMOVKNj5J6AttG16RDo+VndoNo=
|
|
||||||
cloud.google.com/go/resourcemanager v1.10.2/go.mod h1:5f+4zTM/ZOTDm6MmPOp6BQAhR0fi8qFPnvVGSoWszcc=
|
|
||||||
cloud.google.com/go/resourcesettings v1.8.2/go.mod h1:uEgtPiMA+xuBUM4Exu+ZkNpMYP0BLlYeJbyNHfrc+U0=
|
|
||||||
cloud.google.com/go/retail v1.19.1/go.mod h1:W48zg0zmt2JMqmJKCuzx0/0XDLtovwzGAeJjmv6VPaE=
|
|
||||||
cloud.google.com/go/run v1.6.1/go.mod h1:IvJOg2TBb/5a0Qkc6crn5yTy5nkjcgSWQLhgO8QL8PQ=
|
|
||||||
cloud.google.com/go/scheduler v1.11.2/go.mod h1:GZSv76T+KTssX2I9WukIYQuQRf7jk1WI+LOcIEHUUHk=
|
|
||||||
cloud.google.com/go/secretmanager v1.14.2/go.mod h1:Q18wAPMM6RXLC/zVpWTlqq2IBSbbm7pKBlM3lCKsmjw=
|
|
||||||
cloud.google.com/go/security v1.18.2/go.mod h1:3EwTcYw8554iEtgK8VxAjZaq2unFehcsgFIF9nOvQmU=
|
|
||||||
cloud.google.com/go/securitycenter v1.35.2/go.mod h1:AVM2V9CJvaWGZRHf3eG+LeSTSissbufD27AVBI91C8s=
|
|
||||||
cloud.google.com/go/servicedirectory v1.12.2/go.mod h1:F0TJdFjqqotiZRlMXgIOzszaplk4ZAmUV8ovHo08M2U=
|
|
||||||
cloud.google.com/go/shell v1.8.2/go.mod h1:QQR12T6j/eKvqAQLv6R3ozeoqwJ0euaFSz2qLqG93Bs=
|
|
||||||
cloud.google.com/go/spanner v1.72.0/go.mod h1:mw98ua5ggQXVWwp83yjwggqEmW9t8rjs9Po1ohcUGW4=
|
|
||||||
cloud.google.com/go/speech v1.25.2/go.mod h1:KPFirZlLL8SqPaTtG6l+HHIFHPipjbemv4iFg7rTlYs=
|
|
||||||
cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8=
|
|
||||||
cloud.google.com/go/storagetransfer v1.11.2/go.mod h1:FcM29aY4EyZ3yVPmW5SxhqUdhjgPBUOFyy4rqiQbias=
|
|
||||||
cloud.google.com/go/talent v1.7.2/go.mod h1:k1sqlDgS9gbc0gMTRuRQpX6C6VB7bGUxSPcoTRWJod8=
|
|
||||||
cloud.google.com/go/texttospeech v1.10.0/go.mod h1:215FpCOyRxxrS7DSb2t7f4ylMz8dXsQg8+Vdup5IhP4=
|
|
||||||
cloud.google.com/go/tpu v1.7.2/go.mod h1:0Y7dUo2LIbDUx0yQ/vnLC6e18FK6NrDfAhYS9wZ/2vs=
|
|
||||||
cloud.google.com/go/trace v1.11.2/go.mod h1:bn7OwXd4pd5rFuAnTrzBuoZ4ax2XQeG3qNgYmfCy0Io=
|
|
||||||
cloud.google.com/go/translate v1.12.2/go.mod h1:jjLVf2SVH2uD+BNM40DYvRRKSsuyKxVvs3YjTW/XSWY=
|
|
||||||
cloud.google.com/go/video v1.23.2/go.mod h1:rNOr2pPHWeCbW0QsOwJRIe0ZiuwHpHtumK0xbiYB1Ew=
|
|
||||||
cloud.google.com/go/videointelligence v1.12.2/go.mod h1:8xKGlq0lNVyT8JgTkkCUCpyNJnYYEJVWGdqzv+UcwR8=
|
|
||||||
cloud.google.com/go/vision/v2 v2.9.2/go.mod h1:WuxjVQdAy4j4WZqY5Rr655EdAgi8B707Vdb5T8c90uo=
|
|
||||||
cloud.google.com/go/vmmigration v1.8.2/go.mod h1:FBejrsr8ZHmJb949BSOyr3D+/yCp9z9Hk0WtsTiHc1Q=
|
|
||||||
cloud.google.com/go/vmwareengine v1.3.2/go.mod h1:JsheEadzT0nfXOGkdnwtS1FhFAnj4g8qhi4rKeLi/AU=
|
|
||||||
cloud.google.com/go/vpcaccess v1.8.2/go.mod h1:4yvYKNjlNjvk/ffgZ0PuEhpzNJb8HybSM1otG2aDxnY=
|
|
||||||
cloud.google.com/go/webrisk v1.10.2/go.mod h1:c0ODT2+CuKCYjaeHO7b0ni4CUrJ95ScP5UFl9061Qq8=
|
|
||||||
cloud.google.com/go/websecurityscanner v1.7.2/go.mod h1:728wF9yz2VCErfBaACA5px2XSYHQgkK812NmHcUsDXA=
|
|
||||||
cloud.google.com/go/workflows v1.13.2/go.mod h1:l5Wj2Eibqba4BsADIRzPLaevLmIuYF2W+wfFBkRG3vU=
|
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
|
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
|
||||||
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
||||||
github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
|
github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
|
||||||
github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
|
github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
|
||||||
github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
|
|
||||||
github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
|
|
||||||
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
|
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
|
||||||
github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o=
|
|
||||||
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
|
||||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
|
|
||||||
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY=
|
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY=
|
||||||
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA=
|
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA=
|
||||||
github.com/aead/chacha20poly1305 v0.0.0-20170617001512-233f39982aeb/go.mod h1:UzH9IX1MMqOcwhoNOIjmTQeAxrFgzs50j4golQtXXxU=
|
github.com/aead/chacha20poly1305 v0.0.0-20170617001512-233f39982aeb/go.mod h1:UzH9IX1MMqOcwhoNOIjmTQeAxrFgzs50j4golQtXXxU=
|
||||||
@ -138,11 +13,7 @@ github.com/aead/chacha20poly1305 v0.0.0-20201124145622-1a5aba2a8b29 h1:1DcvRPZOd
|
|||||||
github.com/aead/chacha20poly1305 v0.0.0-20201124145622-1a5aba2a8b29/go.mod h1:UzH9IX1MMqOcwhoNOIjmTQeAxrFgzs50j4golQtXXxU=
|
github.com/aead/chacha20poly1305 v0.0.0-20201124145622-1a5aba2a8b29/go.mod h1:UzH9IX1MMqOcwhoNOIjmTQeAxrFgzs50j4golQtXXxU=
|
||||||
github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635 h1:52m0LGchQBBVqJRyYYufQuIbVqRawmubW3OFGqK1ekw=
|
github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635 h1:52m0LGchQBBVqJRyYYufQuIbVqRawmubW3OFGqK1ekw=
|
||||||
github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635/go.mod h1:lmLxL+FV291OopO93Bwf9fQLQeLyt33VJRUg5VJ30us=
|
github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635/go.mod h1:lmLxL+FV291OopO93Bwf9fQLQeLyt33VJRUg5VJ30us=
|
||||||
github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE=
|
|
||||||
github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
|
|
||||||
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
|
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
|
||||||
github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk=
|
|
||||||
github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4=
|
|
||||||
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
|
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
|
||||||
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||||
@ -152,43 +23,32 @@ github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4
|
|||||||
github.com/bytedance/sonic/loader v0.2.1 h1:1GgorWTqf12TA8mma4DDSbaQigE2wOgQo7iCjjJv3+E=
|
github.com/bytedance/sonic/loader v0.2.1 h1:1GgorWTqf12TA8mma4DDSbaQigE2wOgQo7iCjjJv3+E=
|
||||||
github.com/bytedance/sonic/loader v0.2.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
|
github.com/bytedance/sonic/loader v0.2.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||||
github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw=
|
|
||||||
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
|
||||||
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
||||||
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
|
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=
|
github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=
|
||||||
github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
|
github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
|
||||||
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
|
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
|
||||||
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
|
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
|
||||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||||
github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
|
|
||||||
github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I=
|
github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I=
|
||||||
github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
|
github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
|
||||||
github.com/codenotary/immudb v1.9.5 h1:z4DdsDLalQFVcuOktLw2H95BjFnvFL4TxY2tkYwOkkk=
|
github.com/codenotary/immudb v1.9.5 h1:z4DdsDLalQFVcuOktLw2H95BjFnvFL4TxY2tkYwOkkk=
|
||||||
github.com/codenotary/immudb v1.9.5/go.mod h1:+Sex0kDu5F1hE+ydm9p+mpZixjlSeBqrgUZUjNayrNg=
|
github.com/codenotary/immudb v1.9.5/go.mod h1:+Sex0kDu5F1hE+ydm9p+mpZixjlSeBqrgUZUjNayrNg=
|
||||||
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
|
||||||
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||||
github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||||
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||||
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
|
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
||||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E=
|
|
||||||
github.com/eclipse/paho.mqtt.golang v1.5.1 h1:/VSOv3oDLlpqR2Epjn1Q7b2bSTplJIeV2ISgCl2W7nE=
|
github.com/eclipse/paho.mqtt.golang v1.5.1 h1:/VSOv3oDLlpqR2Epjn1Q7b2bSTplJIeV2ISgCl2W7nE=
|
||||||
github.com/eclipse/paho.mqtt.golang v1.5.1/go.mod h1:1/yJCneuyOoCOzKSsOTUc0AJfpsItBGWvYpBLimhArU=
|
github.com/eclipse/paho.mqtt.golang v1.5.1/go.mod h1:1/yJCneuyOoCOzKSsOTUc0AJfpsItBGWvYpBLimhArU=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||||
github.com/envoyproxy/go-control-plane v0.13.0/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnvMg4d7nvT/wl9WgVXn3Q8=
|
|
||||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4=
|
|
||||||
github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg=
|
|
||||||
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
|
||||||
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
|
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
|
||||||
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
|
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
|
||||||
github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M=
|
github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M=
|
||||||
@ -202,13 +62,8 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE
|
|||||||
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
||||||
github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
|
github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
|
||||||
github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
|
github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
|
||||||
github.com/gizak/termui/v3 v3.1.0/go.mod h1:bXQEBkJpzxUAKf0+xq9MSWAvWZlE7c+aidmyFlkYTrY=
|
|
||||||
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
|
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
|
||||||
github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
|
|
||||||
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
|
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
|
||||||
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
|
|
||||||
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
|
||||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
|
||||||
github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
|
github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
|
||||||
github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
|
github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
|
||||||
github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=
|
github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=
|
||||||
@ -235,14 +90,14 @@ github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69
|
|||||||
github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo=
|
github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo=
|
||||||
github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
|
github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
github.com/golang/glog v1.2.2/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
|
|
||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
|
||||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
||||||
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
|
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
|
||||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
|
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
|
||||||
|
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
|
||||||
|
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
github.com/gomodule/redigo v1.9.2 h1:HrutZBLhSIU8abiSfW8pj8mPhOyMYjZT/wcA4/L9L9s=
|
github.com/gomodule/redigo v1.9.2 h1:HrutZBLhSIU8abiSfW8pj8mPhOyMYjZT/wcA4/L9L9s=
|
||||||
github.com/gomodule/redigo v1.9.2/go.mod h1:KsU3hiK/Ay8U42qpaJk+kuNa3C+spxapWpM+ywhcgtw=
|
github.com/gomodule/redigo v1.9.2/go.mod h1:KsU3hiK/Ay8U42qpaJk+kuNa3C+spxapWpM+ywhcgtw=
|
||||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||||
@ -251,13 +106,9 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
|||||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||||
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
|
|
||||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
|
|
||||||
github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4=
|
|
||||||
github.com/googleapis/google-cloud-go-testing v0.0.0-20210719221736-1c9a4c676720/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
|
|
||||||
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
|
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
|
||||||
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI=
|
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI=
|
||||||
@ -266,24 +117,10 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92Bcuy
|
|||||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
|
github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
|
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.17.0/go.mod h1:Hbb13e3/WtqQ8U5hLGkek9gJvBLasHuPFI0UEGfnQ10=
|
|
||||||
github.com/hashicorp/consul/api v1.28.2/go.mod h1:KyzqzgMEya+IZPcD65YFoOVAgPpbfERu4I/tzG6/ueE=
|
|
||||||
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
|
|
||||||
github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
|
|
||||||
github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
|
||||||
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
|
|
||||||
github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
|
|
||||||
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
|
|
||||||
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||||
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||||
github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
|
|
||||||
github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
|
|
||||||
github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg=
|
|
||||||
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
|
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
|
||||||
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||||
github.com/influxdata/influxdb-client-go/v2 v2.13.0/go.mod h1:k+spCbt9hcvqvUiz0sr5D8LolXHqAAOfPw9v/RIRHl4=
|
|
||||||
github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo=
|
|
||||||
github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo=
|
github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo=
|
||||||
github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
|
github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
|
||||||
github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8=
|
github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8=
|
||||||
@ -336,13 +173,10 @@ github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0f
|
|||||||
github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
|
github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
|
||||||
github.com/jackc/puddle v1.3.0 h1:eHK/5clGOatcjX3oWGBO/MpxpbHzSwud5EWTSCI+MX0=
|
github.com/jackc/puddle v1.3.0 h1:eHK/5clGOatcjX3oWGBO/MpxpbHzSwud5EWTSCI+MX0=
|
||||||
github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
|
github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
|
||||||
github.com/jaswdr/faker v1.16.0/go.mod h1:x7ZlyB1AZqwqKZgyQlnqEG8FDptmHlncA5u2zY/yi6w=
|
|
||||||
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
|
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
|
||||||
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
|
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
|
||||||
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
|
||||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||||
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
|
|
||||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||||
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
|
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
|
||||||
@ -353,7 +187,6 @@ github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK
|
|||||||
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
|
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||||
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
|
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||||
@ -362,7 +195,6 @@ github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
|
|||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||||
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
|
|
||||||
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
|
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
|
||||||
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
|
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
|
||||||
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||||
@ -377,58 +209,40 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0
|
|||||||
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
||||||
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
|
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
|
||||||
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||||
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
|
||||||
github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||||
github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
github.com/mattn/go-sqlite3 v1.14.34 h1:3NtcvcUnFBPsuRcno8pUtupspG/GM+9nZ88zgJcp6Zk=
|
||||||
github.com/mattn/goveralls v0.0.11/go.mod h1:gU8SyhNswsJKchEV93xRQxX6X3Ei4PJdQk/6ZHvrvRk=
|
github.com/mattn/go-sqlite3 v1.14.34/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
|
|
||||||
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
|
|
||||||
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
|
|
||||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
|
||||||
github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0=
|
|
||||||
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
||||||
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||||
github.com/mitchellh/panicwrap v1.0.0 h1:67zIyVakCIvcs69A0FGfZjBdPleaonSgGlXRSRlb6fE=
|
github.com/mitchellh/panicwrap v1.0.0 h1:67zIyVakCIvcs69A0FGfZjBdPleaonSgGlXRSRlb6fE=
|
||||||
github.com/mitchellh/panicwrap v1.0.0/go.mod h1:pKvZHwWrZowLUzftuFq7coarnxbBXU4aQh3N0BJOeeA=
|
github.com/mitchellh/panicwrap v1.0.0/go.mod h1:pKvZHwWrZowLUzftuFq7coarnxbBXU4aQh3N0BJOeeA=
|
||||||
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
|
|
||||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||||
|
github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE=
|
||||||
|
github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
|
||||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
|
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
|
||||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||||
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
|
||||||
github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo=
|
|
||||||
github.com/nats-io/nats.go v1.34.0/go.mod h1:Ubdu4Nh9exXdSz0RVWRFBbRfrbSxOYd26oF0wkWclB8=
|
|
||||||
github.com/nats-io/nkeys v0.4.7/go.mod h1:kqXRgRDPlGy7nGaEDMuYzmiJCIAAWDK0IMBtDmGD0nc=
|
|
||||||
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
|
|
||||||
github.com/nsf/termbox-go v1.1.1/go.mod h1:T0cTdVuOwf7pHQNtfhnEbzHbcNyCEcVU4YPpouCbVxo=
|
|
||||||
github.com/o1egl/paseto v1.0.0 h1:bwpvPu2au176w4IBlhbyUv/S5VPptERIA99Oap5qUd0=
|
github.com/o1egl/paseto v1.0.0 h1:bwpvPu2au176w4IBlhbyUv/S5VPptERIA99Oap5qUd0=
|
||||||
github.com/o1egl/paseto v1.0.0/go.mod h1:5HxsZPmw/3RI2pAwGo1HhOOwSdvBpcuVzO7uDkm+CLU=
|
github.com/o1egl/paseto v1.0.0/go.mod h1:5HxsZPmw/3RI2pAwGo1HhOOwSdvBpcuVzO7uDkm+CLU=
|
||||||
github.com/oapi-codegen/runtime v1.0.0/go.mod h1:LmCUMQuPB4M/nLXilQXhHw+BLZdDb18B34OO356yJ/A=
|
|
||||||
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
|
|
||||||
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
||||||
github.com/ory/go-acc v0.2.8/go.mod h1:iCRZUdGb/7nqvSn8xWZkhfVrtXRZ9Wru2E5rabCjFPI=
|
|
||||||
github.com/ory/viper v1.7.5/go.mod h1:ypOuyJmEUb3oENywQZRgeAMwqgOyDqwboO1tj3DjTaM=
|
|
||||||
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
|
|
||||||
github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
|
|
||||||
github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
|
github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
|
||||||
github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
|
github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
|
||||||
github.com/peterh/liner v1.2.1/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0=
|
|
||||||
github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
|
github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
|
||||||
github.com/petermattis/goid v0.0.0-20241025130422-66cb2e6d7274 h1:qli3BGQK0tYDkSEvZ/FzZTi9ZrOX86Q6CIhKLGc489A=
|
github.com/petermattis/goid v0.0.0-20241025130422-66cb2e6d7274 h1:qli3BGQK0tYDkSEvZ/FzZTi9ZrOX86Q6CIhKLGc489A=
|
||||||
github.com/petermattis/goid v0.0.0-20241025130422-66cb2e6d7274/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
|
github.com/petermattis/goid v0.0.0-20241025130422-66cb2e6d7274/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
|
||||||
|
github.com/pires/go-proxyproto v0.11.0 h1:gUQpS85X/VJMdUsYyEgyn59uLJvGqPhJV5YvG68wXH4=
|
||||||
|
github.com/pires/go-proxyproto v0.11.0/go.mod h1:ZKAAyp3cgy5Y5Mo4n9AlScrkCZwUy0g3Jf+slqQVcuU=
|
||||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pkg/sftp v1.13.6/go.mod h1:tz1ryNURKu77RL+GuCzmoJYxQczL3wLNNpPWagdg4Qk=
|
|
||||||
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
|
||||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
@ -441,9 +255,8 @@ github.com/prometheus/common v0.60.1 h1:FUas6GcOw66yB/73KC+BOZoFJmbo/1pojoILArPA
|
|||||||
github.com/prometheus/common v0.60.1/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw=
|
github.com/prometheus/common v0.60.1/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw=
|
||||||
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
|
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
|
||||||
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
|
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
|
||||||
github.com/pseudomuto/protoc-gen-doc v1.4.1/go.mod h1:exDTOVwqpp30eV/EDPFLZy3Pwr2sn6hBC1WIYH/UbIg=
|
github.com/quagmt/udecimal v1.10.0 h1:r8VgL1ns0HruRrTX4aRRIE4J5FGdjd1sGRwG7eZGx7A=
|
||||||
github.com/pseudomuto/protokit v0.2.1/go.mod h1:gt7N5Rz2flBzYafvaxyIxMZC0TTF5jDZfRnw25hAAyo=
|
github.com/quagmt/udecimal v1.10.0/go.mod h1:ScmJ/xTGZcEoYiyMMzgDLn79PEJHcMBiJ4NNRT3FirA=
|
||||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
|
||||||
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
||||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
|
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
|
||||||
@ -455,7 +268,6 @@ github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OK
|
|||||||
github.com/rs/zerolog v1.15.0 h1:uPRuwkWF4J6fGsJ2R0Gn2jB1EQiav9k3S6CSdygQJXY=
|
github.com/rs/zerolog v1.15.0 h1:uPRuwkWF4J6fGsJ2R0Gn2jB1EQiav9k3S6CSdygQJXY=
|
||||||
github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc=
|
github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc=
|
||||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
github.com/sagikazarmark/crypt v0.19.0/go.mod h1:c6vimRziqqERhtSe0MhIvzE1w54FrCHtrXb5NH/ja78=
|
|
||||||
github.com/sagikazarmark/locafero v0.6.0 h1:ON7AQg37yzcRPU69mt7gwhFEBwxI6P9T4Qu3N51bwOk=
|
github.com/sagikazarmark/locafero v0.6.0 h1:ON7AQg37yzcRPU69mt7gwhFEBwxI6P9T4Qu3N51bwOk=
|
||||||
github.com/sagikazarmark/locafero v0.6.0/go.mod h1:77OmuIc6VTraTXKXIs/uvUxKGUXjE1GbemJYHqdNjX0=
|
github.com/sagikazarmark/locafero v0.6.0/go.mod h1:77OmuIc6VTraTXKXIs/uvUxKGUXjE1GbemJYHqdNjX0=
|
||||||
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
|
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
|
||||||
@ -464,12 +276,10 @@ github.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb
|
|||||||
github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U=
|
github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U=
|
||||||
github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
|
github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
|
||||||
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
|
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
|
||||||
github.com/schollz/progressbar/v2 v2.15.0/go.mod h1:UdPq3prGkfQ7MOzZKlDRpYKcFqEMczbD7YmbPgpzKMI=
|
|
||||||
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
|
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
|
||||||
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
|
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
|
||||||
github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
|
github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
|
||||||
github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME=
|
github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME=
|
||||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
|
||||||
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
|
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
|
||||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||||
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
|
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
|
||||||
@ -480,7 +290,6 @@ github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w=
|
|||||||
github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
|
github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
|
||||||
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
|
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
|
||||||
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
|
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
|
||||||
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
|
|
||||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||||
github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI=
|
github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI=
|
||||||
@ -490,6 +299,8 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
|
|||||||
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
||||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||||
|
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
|
||||||
|
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
@ -508,33 +319,29 @@ github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+z
|
|||||||
github.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRdOqDkvq0uzo=
|
github.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRdOqDkvq0uzo=
|
||||||
github.com/swaggo/swag v1.16.4 h1:clWJtd9LStiG3VeijiCfOVODP6VpHtKdQy9ELFG3s1A=
|
github.com/swaggo/swag v1.16.4 h1:clWJtd9LStiG3VeijiCfOVODP6VpHtKdQy9ELFG3s1A=
|
||||||
github.com/swaggo/swag v1.16.4/go.mod h1:VBsHJRsDvfYvqoiMKnsdwhNV9LEMHgEDZcyVYX0sxPg=
|
github.com/swaggo/swag v1.16.4/go.mod h1:VBsHJRsDvfYvqoiMKnsdwhNV9LEMHgEDZcyVYX0sxPg=
|
||||||
github.com/takama/daemon v0.12.0/go.mod h1:PFDPquCi+3LI5PpAKS/8LvJBHTfkdsEXfGtANGx9hH4=
|
|
||||||
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
|
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
|
||||||
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
|
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
|
||||||
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
|
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
|
||||||
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
|
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
|
||||||
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
|
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
|
||||||
github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU=
|
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
|
||||||
|
github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY=
|
||||||
|
github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4=
|
||||||
|
github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8=
|
||||||
|
github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM=
|
||||||
|
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 h1:ilQV1hzziu+LLM3zUTJ0trRztfwgjqKnBWNtSRkbmwM=
|
||||||
|
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI=
|
||||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
|
github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
|
||||||
go.etcd.io/etcd/api/v3 v3.5.12/go.mod h1:Ot+o0SWSyT6uHhA56al1oCED0JImsRiU9Dc26+C2a+4=
|
go.mongodb.org/mongo-driver v1.17.9 h1:IexDdCuuNJ3BHrELgBlyaH9p60JXAvdzWR128q+U5tU=
|
||||||
go.etcd.io/etcd/client/pkg/v3 v3.5.12/go.mod h1:seTzl2d9APP8R5Y2hFL3NVlD6qC/dOT+3kvrqPyTas4=
|
go.mongodb.org/mongo-driver v1.17.9/go.mod h1:LlOhpH5NUEfhxcAwG0UEkMqwYcc4JU18gtCdGudk/tQ=
|
||||||
go.etcd.io/etcd/client/v2 v2.305.12/go.mod h1:aQ/yhsxMu+Oht1FOupSr60oBvcS9cKXHrzBpDsPTf9E=
|
|
||||||
go.etcd.io/etcd/client/v3 v3.5.12/go.mod h1:tSbBCakoWmmddL+BKVAJHa9km+O/E+bumDe9mSbPiqw=
|
|
||||||
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
|
|
||||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
|
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
|
|
||||||
go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
|
|
||||||
go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco=
|
|
||||||
go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
|
|
||||||
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
||||||
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
||||||
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||||
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
|
||||||
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
|
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
|
||||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||||
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
|
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
|
||||||
@ -547,7 +354,6 @@ go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
|||||||
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
||||||
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
|
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
|
||||||
go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
|
go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
|
||||||
go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
|
|
||||||
golang.org/x/arch v0.12.0 h1:UsYJhbzPYGsT0HbEdmYcqtCv8UNGvnaL561NnIUvaKg=
|
golang.org/x/arch v0.12.0 h1:UsYJhbzPYGsT0HbEdmYcqtCv8UNGvnaL561NnIUvaKg=
|
||||||
golang.org/x/arch v0.12.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
|
golang.org/x/arch v0.12.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
|
||||||
golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
@ -601,7 +407,6 @@ golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
|
|||||||
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
|
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
@ -637,7 +442,6 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|||||||
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
|
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
|
||||||
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
|
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
|
||||||
golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8/go.mod h1:Pi4ztBfryZoJEkyFTI5/Ocsu2jXyDr6iSdgJiYE/uwE=
|
|
||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
@ -652,12 +456,12 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
|||||||
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
|
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
|
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
|
||||||
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
|
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
|
||||||
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||||
@ -677,18 +481,14 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
|
|||||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||||
golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
|
golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
|
||||||
golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
|
golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
|
||||||
golang.org/x/tools/cmd/cover v0.1.0-deprecated/go.mod h1:hMDiIvlpN1NoVgmjLjUJE9tMHyxHjFX7RuQ+rW12mSA=
|
|
||||||
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
|
|
||||||
google.golang.org/api v0.171.0/go.mod h1:Hnq5AHm4OTMt2BUVjael2CWZFD6vksJdWCWiUAmjC9o=
|
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
|
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||||
google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
@ -707,7 +507,6 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji
|
|||||||
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
|
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
|
||||||
google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0=
|
google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0=
|
||||||
google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA=
|
google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA=
|
||||||
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
|
|
||||||
google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
|
google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
|
||||||
google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
@ -721,7 +520,6 @@ gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
|||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
@ -732,5 +530,3 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt
|
|||||||
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
|
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
|
||||||
quantex.com.ar/multidb v1.2.2 h1:vYZkOI/srWFlfUk8ZsbmcNp7OWiPWflBnaLYaPTPgAs=
|
quantex.com.ar/multidb v1.2.2 h1:vYZkOI/srWFlfUk8ZsbmcNp7OWiPWflBnaLYaPTPgAs=
|
||||||
quantex.com.ar/multidb v1.2.2/go.mod h1:aIxLGHeesPkmSocw/VSZBc+pGDmxx7QRUSd+TxjAFFc=
|
quantex.com.ar/multidb v1.2.2/go.mod h1:aIxLGHeesPkmSocw/VSZBc+pGDmxx7QRUSd+TxjAFFc=
|
||||||
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
|
||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
|
|
||||||
|
|||||||
1
last_update_info.txt
Normal file
1
last_update_info.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
Thu Feb 19 05:35:16 2026 -0600
|
||||||
4
main.go
4
main.go
@ -178,6 +178,10 @@ func parseLogLevel(level string) (slog.Level, error) {
|
|||||||
|
|
||||||
func startRunner(runner, globalCfg, serviceCfg string) {
|
func startRunner(runner, globalCfg, serviceCfg string) {
|
||||||
var fn func(cfg app.Config) error
|
var fn func(cfg app.Config) error
|
||||||
|
|
||||||
|
if runner == "" {
|
||||||
|
runner = "service"
|
||||||
|
}
|
||||||
switch runner {
|
switch runner {
|
||||||
case "service":
|
case "service":
|
||||||
fn = service.Runner
|
fn = service.Runner
|
||||||
|
|||||||
399
quickfix/CHANGELOG.md
Normal file
399
quickfix/CHANGELOG.md
Normal file
@ -0,0 +1,399 @@
|
|||||||
|
## 0.9.10 (August 8, 2025)
|
||||||
|
|
||||||
|
### BUG FIXES
|
||||||
|
* Send Reset if the ResetTime elapsed in between checks [#725](https://quantex.com/qfixdpl/quickfix/pull/725)
|
||||||
|
|
||||||
|
## 0.9.9 (July 31, 2025)
|
||||||
|
|
||||||
|
### BUG FIXES
|
||||||
|
* Adds missing tz for resetseqtime without starttime endtime #723 [#723](https://quantex.com/qfixdpl/quickfix/pull/723)
|
||||||
|
|
||||||
|
## 0.9.8 (July 21, 2025)
|
||||||
|
|
||||||
|
### ENHANCEMENTS
|
||||||
|
* Add DB name configuration [#711](https://quantex.com/qfixdpl/quickfix/pull/711)
|
||||||
|
* Change ResetSeqTime to time.Time based on the config's timeZone [#712](https://quantex.com/qfixdpl/quickfix/pull/712)
|
||||||
|
|
||||||
|
### BUG FIXES
|
||||||
|
* Block Sends when Resend Request is active [#715](https://quantex.com/qfixdpl/quickfix/pull/715)
|
||||||
|
* Fix the issue of incorrect time range calculation across days [#718](https://quantex.com/qfixdpl/quickfix/pull/718)
|
||||||
|
|
||||||
|
## 0.9.7 (April 23, 2025)
|
||||||
|
|
||||||
|
### FEATURES
|
||||||
|
* Adds SQL, MongoDB and Composite FIX Log and LogFactory implementations, see `config/configuration.go` for details [#672](https://quantex.com/qfixdpl/quickfix/pull/672)
|
||||||
|
* Adds convenience getters for session log and store [#675](https://quantex.com/qfixdpl/quickfix/pull/675)
|
||||||
|
* Adds config option for ResetSeqTime [#705](https://quantex.com/qfixdpl/quickfix/pull/705)
|
||||||
|
|
||||||
|
### ENHANCEMENTS
|
||||||
|
* File store uses files exclusively [#680](https://quantex.com/qfixdpl/quickfix/pull/680)
|
||||||
|
* Protect concurrent usage of filestore [#688](https://quantex.com/qfixdpl/quickfix/pull/688)
|
||||||
|
* Support udecimal library in code generation [#700](https://quantex.com/qfixdpl/quickfix/pull/700)
|
||||||
|
|
||||||
|
### BUG FIXES
|
||||||
|
* Avoid unkeyed fields usage for exported struct in generated code [#683](https://quantex.com/qfixdpl/quickfix/pull/683)
|
||||||
|
* Iterate messages in filestore opens a separate file to avoid deadlock [#703](https://quantex.com/qfixdpl/quickfix/pull/703)
|
||||||
|
* Correct ordering in message trailer [#707](https://quantex.com/qfixdpl/quickfix/pull/707)
|
||||||
|
|
||||||
|
## 0.9.6 (September 20, 2024)
|
||||||
|
|
||||||
|
### ENHANCEMENTS
|
||||||
|
* Allow the clients of acceptor to specify their own tls.Config https://quantex.com/qfixdpl/quickfix/pull/667
|
||||||
|
* Adds NextExpectedSeqNum setting https://quantex.com/qfixdpl/quickfix/pull/668
|
||||||
|
|
||||||
|
### BUG FIXES
|
||||||
|
* Reinit stop sync to prevent deadlock on sequential start/stops https://quantex.com/qfixdpl/quickfix/pull/669
|
||||||
|
* Check logon auth before resetting store https://quantex.com/qfixdpl/quickfix/pull/670
|
||||||
|
* Reverts ToAdmin call sequencing https://quantex.com/qfixdpl/quickfix/pull/674
|
||||||
|
|
||||||
|
## 0.9.5 (August 14, 2024)
|
||||||
|
|
||||||
|
### ENHANCEMENTS
|
||||||
|
* Introduce message iterator to avoid loading all messages into memory at once upon resend request https://quantex.com/qfixdpl/quickfix/pull/659
|
||||||
|
* Only lock fieldmap once during message parsing https://quantex.com/qfixdpl/quickfix/pull/658
|
||||||
|
* Optimize tag value parsing https://quantex.com/qfixdpl/quickfix/pull/657
|
||||||
|
* Use bytes.Count to count the number of message fields https://quantex.com/qfixdpl/quickfix/pull/655
|
||||||
|
* Port config documentation into proper go doc format https://quantex.com/qfixdpl/quickfix/pull/649
|
||||||
|
* Support TLS configuration as raw bytes https://quantex.com/qfixdpl/quickfix/pull/647
|
||||||
|
|
||||||
|
### BUG FIXES
|
||||||
|
* Use the Go generated file convention https://quantex.com/qfixdpl/quickfix/pull/660
|
||||||
|
* Fix stuck call to Dial when calling Stop on the Initiator https://quantex.com/qfixdpl/quickfix/pull/654
|
||||||
|
* Do not increment NextTargetMsgSeqNum for out of sequence Logout and Test Requests https://quantex.com/qfixdpl/quickfix/pull/645
|
||||||
|
|
||||||
|
## 0.9.4 (May 29, 2024)
|
||||||
|
|
||||||
|
### ENHANCEMENTS
|
||||||
|
* Adds log to readLoop just like writeLoop https://quantex.com/qfixdpl/quickfix/pull/642
|
||||||
|
|
||||||
|
### BUG FIXES
|
||||||
|
* Maintain repeating group field order when parsing messages https://quantex.com/qfixdpl/quickfix/pull/636
|
||||||
|
|
||||||
|
## 0.9.3 (May 9, 2024)
|
||||||
|
|
||||||
|
### BUG FIXES
|
||||||
|
* Change filestore.offsets from map[int]msgDef to sync.Map https://quantex.com/qfixdpl/quickfix/pull/639
|
||||||
|
* Unregister sessions on stop https://quantex.com/qfixdpl/quickfix/pull/637
|
||||||
|
* Corrects ResetOnLogon behavior for initiators https://quantex.com/qfixdpl/quickfix/pull/635
|
||||||
|
|
||||||
|
### FEATURES
|
||||||
|
* Add AllowUnknownMessageFields & CheckUserDefinedFields settings as included in QuickFIX/J https://quantex.com/qfixdpl/quickfix/pull/632
|
||||||
|
|
||||||
|
## 0.9.2 (April 23, 2024)
|
||||||
|
|
||||||
|
### BUG FIXES
|
||||||
|
* Prevent message queue blocking in the case of network connection trouble https://quantex.com/qfixdpl/quickfix/pull/615 https://quantex.com/qfixdpl/quickfix/pull/628
|
||||||
|
* Corrects validation of multiple repeating groups with different fields https://quantex.com/qfixdpl/quickfix/pull/623
|
||||||
|
|
||||||
|
## 0.9.1 (April 15, 2024)
|
||||||
|
|
||||||
|
### BUG FIXES
|
||||||
|
* Preserve original body when resending https://quantex.com/qfixdpl/quickfix/pull/624
|
||||||
|
|
||||||
|
## 0.9.0 (November 13, 2023)
|
||||||
|
|
||||||
|
### FEATURES
|
||||||
|
* Add Weekdays config setting as included in QuickFIX/J https://quantex.com/qfixdpl/quickfix/pull/590
|
||||||
|
* `MessageStore` Refactor
|
||||||
|
|
||||||
|
The message store types external to a quickfix-go application have been refactored into individual sub-packages within `quickfix`. The benefit of this is that the dependencies for these specific store types are no longer included in the quickfix package itself, so many projects depending on the quickfix package will no longer be bloated with large indirect dependencies if they are not specifically implemented in your application. This applies to the `mongo` (MongoDB), `file` (A file on-disk), and `sql` (Any db accessed with a go sql driver interface). The `memorystore` (in-memory message store) syntax remains unchanged. The minor drawback to this is that with some re-packaging came some minor syntax changes. See https://quantex.com/qfixdpl/quickfix/issues/547 and https://quantex.com/qfixdpl/quickfix/pull/592 for more information. The relevant examples are below.
|
||||||
|
|
||||||
|
MONGO
|
||||||
|
```go
|
||||||
|
import "quantex.com/qfixdpl/quickfix"
|
||||||
|
|
||||||
|
...
|
||||||
|
acceptor, err = quickfix.NewAcceptor(app, quickfix.NewMongoStoreFactory(appSettings), appSettings, fileLogFactory)
|
||||||
|
```
|
||||||
|
becomes
|
||||||
|
```go
|
||||||
|
import (
|
||||||
|
"quantex.com/qfixdpl/quickfix"
|
||||||
|
"quantex.com/qfixdpl/quickfix/store/mongo"
|
||||||
|
)
|
||||||
|
|
||||||
|
...
|
||||||
|
acceptor, err = quickfix.NewAcceptor(app, mongo.NewStoreFactory(appSettings), appSettings, fileLogFactory)
|
||||||
|
```
|
||||||
|
|
||||||
|
FILE
|
||||||
|
```go
|
||||||
|
import "quantex.com/qfixdpl/quickfix"
|
||||||
|
|
||||||
|
...
|
||||||
|
acceptor, err = quickfix.NewAcceptor(app, quickfix.NewFileStoreFactory(appSettings), appSettings, fileLogFactory)
|
||||||
|
```
|
||||||
|
becomes
|
||||||
|
```go
|
||||||
|
import (
|
||||||
|
"quantex.com/qfixdpl/quickfix"
|
||||||
|
"quantex.com/qfixdpl/quickfix/store/file"
|
||||||
|
)
|
||||||
|
|
||||||
|
...
|
||||||
|
acceptor, err = quickfix.NewAcceptor(app, file.NewStoreFactory(appSettings), appSettings, fileLogFactory)
|
||||||
|
```
|
||||||
|
|
||||||
|
SQL
|
||||||
|
|
||||||
|
```go
|
||||||
|
import "quantex.com/qfixdpl/quickfix"
|
||||||
|
|
||||||
|
...
|
||||||
|
acceptor, err = quickfix.NewAcceptor(app, quickfix.NewSQLStoreFactory(appSettings), appSettings, fileLogFactory)
|
||||||
|
```
|
||||||
|
becomes
|
||||||
|
```go
|
||||||
|
import (
|
||||||
|
"quantex.com/qfixdpl/quickfix"
|
||||||
|
"quantex.com/qfixdpl/quickfix/store/sql"
|
||||||
|
)
|
||||||
|
|
||||||
|
...
|
||||||
|
acceptor, err = quickfix.NewAcceptor(app, sql.NewStoreFactory(appSettings), appSettings, fileLogFactory)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### ENHANCEMENTS
|
||||||
|
* Acceptance suite store type expansions https://quantex.com/qfixdpl/quickfix/pull/596 and https://quantex.com/qfixdpl/quickfix/pull/591
|
||||||
|
* Support Go v1.21 https://quantex.com/qfixdpl/quickfix/pull/589
|
||||||
|
|
||||||
|
|
||||||
|
### BUG FIXES
|
||||||
|
* Resolves outstanding issues with postgres db creation syntax and `pgx` driver https://quantex.com/qfixdpl/quickfix/pull/598
|
||||||
|
* Fix sequence number bug when storage fails https://quantex.com/qfixdpl/quickfix/pull/432
|
||||||
|
|
||||||
|
|
||||||
|
## 0.8.1 (October 27, 2023)
|
||||||
|
|
||||||
|
BUG FIXES
|
||||||
|
|
||||||
|
* Remove initiator wait [GH 587]
|
||||||
|
* for xml charset and bug of "Incorrect NumInGroup" [GH 368, 363, 365, 366]
|
||||||
|
* Allow time.Duration or int for timeouts [GH 477]
|
||||||
|
* Trim extra non-ascii characters that can arise from manually editing [GH 463, 464]
|
||||||
|
|
||||||
|
## 0.8.0 (October 25, 2023)
|
||||||
|
|
||||||
|
ENHANCEMENTS
|
||||||
|
|
||||||
|
* Remove tag from field map [GH 544]
|
||||||
|
* Add message.Bytes() to avoid string conversion [GH 546]
|
||||||
|
* Check RejectInvalidMessage on FIXT validation [GH 572]
|
||||||
|
|
||||||
|
BUG FIXES
|
||||||
|
|
||||||
|
* Fix repeating group read tags lost [GH 462]
|
||||||
|
* Acceptance test result must be predictable [GH 578]
|
||||||
|
* Makes event timer stop idempotent [GH 580, 581]
|
||||||
|
* Added WaitGroup Wait in Initiator [GH 584]
|
||||||
|
|
||||||
|
## 0.7.0 (January 2, 2023)
|
||||||
|
|
||||||
|
FEATURES
|
||||||
|
|
||||||
|
* PersistMessages Config [GH 297]
|
||||||
|
* MaxLatency [GH 242]
|
||||||
|
* ResetOnDisconnect Configuration [GH 68]
|
||||||
|
* Support for High Precision Timestamps [GH 288]
|
||||||
|
* LogonTimeout [GH 295]
|
||||||
|
* LogoutTimeout [GH 296]
|
||||||
|
* Socks Proxy [GH 375]
|
||||||
|
|
||||||
|
ENHANCEMENTS
|
||||||
|
|
||||||
|
* Add SocketUseSSL parameter to allow SSL/TLS without client certs [GH 311]
|
||||||
|
* Support for RejectInvalidMessage configuration [GH 336]
|
||||||
|
* Add deep copy for Messages [GH 338]
|
||||||
|
* Add Go Module support [GH 340]
|
||||||
|
* Support timeout on ssl connection [GH 347, 349]
|
||||||
|
* Dynamic Sessions [GH 521]
|
||||||
|
* Upgrade Mongo Driver to support transactions [GH 527]
|
||||||
|
|
||||||
|
BUG FIXES
|
||||||
|
|
||||||
|
* header and trailer templates use rootpath [GH 302]
|
||||||
|
* Initiator stop panic if stop chan's already closed [GH 359]
|
||||||
|
* Connection closed when inbound logon has a too-low sequence number [GH 369]
|
||||||
|
* TLS server name config [GH 384]
|
||||||
|
* Fix concurrent map write [GH 436]
|
||||||
|
* Race condition during bilateral initial resend request [GH 439]
|
||||||
|
* Deadlock when disconnecting dynamic session [GH 524]
|
||||||
|
* Align session's ticker with round second [GH 533]
|
||||||
|
* Seqnum persist and increment fix [GH 528]
|
||||||
|
|
||||||
|
|
||||||
|
## 0.6.0 (August 14, 2017)
|
||||||
|
|
||||||
|
FEATURES
|
||||||
|
|
||||||
|
* CheckLatency [GH 241, 266]
|
||||||
|
* ResendRequestChunkSize [GH 243, 245]
|
||||||
|
* EnableLastMsgSeqNumProcessed [GH 253, 256]
|
||||||
|
|
||||||
|
ENHANCEMENTS
|
||||||
|
|
||||||
|
* config.SocketTLSForTesting(bool) [GH 235]
|
||||||
|
* API Interface Enhancements [GH 251, 252, 254, 255, 257, 258, 259]
|
||||||
|
* Misc. Performance Optimizations [GH 260, 261, 263, 264, 265, 268, 270, 271, 272, 273, 274, 275]
|
||||||
|
* TLS Configuration [GH 279, 280]
|
||||||
|
* Use data dictionary for parsing fix messages [GH 281]
|
||||||
|
|
||||||
|
BUG FIXES
|
||||||
|
|
||||||
|
* Resend logon fix [GH 244]
|
||||||
|
* PossDup messages with seqnum too low should not be sent to FromCallbacks [GH 246, 247]
|
||||||
|
* Router should not reject admin messages or business rejects [GH 249, 250]
|
||||||
|
* Fixes file log output for incoming, outgoing [GH 262]
|
||||||
|
* message.String() returns rawMessage if set, builds otherwise [GH 269]
|
||||||
|
* Use timestamp with time zone for postgres sql [GH 286]
|
||||||
|
|
||||||
|
|
||||||
|
## 0.5.0 (September 1, 2016)
|
||||||
|
|
||||||
|
FEATURES
|
||||||
|
|
||||||
|
* Session Scheduling [GH 31, 195, 196, 197, 198, 200, 201, 202, 203, 204, 205, 211, 212, 218, 220]
|
||||||
|
* TimeZone configuration [GH 206]
|
||||||
|
* StartDay, EndDay for week long sessions [GH 207, 239]
|
||||||
|
* Support for connection over SSL [GH 63, 193]
|
||||||
|
* SocketConnectHost/Port<n> [GH 65, 217]
|
||||||
|
* ResetOnLogout Configuration enhancement [GH 67, 192]
|
||||||
|
* SocketAcceptAddress, ipv6 support [GH 83, 215]
|
||||||
|
* RefreshOnLogon [GH 214]
|
||||||
|
|
||||||
|
ENHANCEMENTS
|
||||||
|
|
||||||
|
* Reject Logon Support [GH 57, 225]
|
||||||
|
* FIX Decimal [GH 114, 223, 224, 227, 228]
|
||||||
|
* test refactoring, leveraging testify mock assertions [GH 186]
|
||||||
|
* KISS on registry, session management [GH 208]
|
||||||
|
* moving and renaming test jigs [GH 210]
|
||||||
|
* Config Enhancements [GH 216]
|
||||||
|
* travis uses go 1.7 [GH 219]
|
||||||
|
* adds 'generated.go' suffix to generated source [GH 221]
|
||||||
|
* vendored deps GH [GH 222, 226]
|
||||||
|
* renames SQLStore config settings [GH 229]
|
||||||
|
* Add FieldMap.{SetInt, SetString} [GH 236]
|
||||||
|
|
||||||
|
|
||||||
|
BUG FIXES
|
||||||
|
|
||||||
|
* DefaultApplVerID Configuration not translating enum names [GH 89, 213]
|
||||||
|
* Dropped issues in logout state [GH 187, 188]
|
||||||
|
* correctly increments in target seq num on logout for in session state [GH 189]
|
||||||
|
* SendToTarget should return an error if toApp returns DoNotSend [GH 190, 191]
|
||||||
|
* Logon fix [GH 194]
|
||||||
|
* onlogout calls depend on session state [GH 199]
|
||||||
|
* fixes bug in resend state where resend response is processed incomplete [GH 230]
|
||||||
|
* fixes logic around logon message with sequence number too high [GH 231]
|
||||||
|
* SequenceReset, Resent Messages not hitting ToAdmin/ToApp [GH 232, 233]
|
||||||
|
* Next MsgSeqNo after received ResetSeqNumFlag=Y [GH 238, 240]
|
||||||
|
|
||||||
|
|
||||||
|
## 0.4.0 (August 1, 2016)
|
||||||
|
|
||||||
|
FEATURES
|
||||||
|
|
||||||
|
* ReconnectInterval Initiator Configuration [GH 66, 161]
|
||||||
|
|
||||||
|
ENHANCEMENTS
|
||||||
|
|
||||||
|
* Generate Getters for messages [GH 118]
|
||||||
|
* Drop generate-* apps into cmd/ [GH 125, 150]
|
||||||
|
* Misc field type refactoring [GH 145]
|
||||||
|
* Cmd gen [GH 146, 147]
|
||||||
|
* refactoring enum generation [GH 148]
|
||||||
|
* pipelining generation [GH 149]
|
||||||
|
* Sending a message to an unlogged-in session, results an error [GH 173, 182]
|
||||||
|
* adds event logging related to session events [GH 175]
|
||||||
|
* Error handling around session code enhancement [GH 176]
|
||||||
|
* refactoring of session code [GH 183]
|
||||||
|
* Gen header beginstring [GH 184]
|
||||||
|
|
||||||
|
BUG FIXES
|
||||||
|
|
||||||
|
* Do not incr target seq num when seq num too high [GH 151]
|
||||||
|
* can't parse securitylist message [GH 153, 155]
|
||||||
|
* Concurrent map operations on Acceptor.Stop() [GH 156]
|
||||||
|
* Return requiredConfigurationMissing when "FileStorePath" not found [GH 157]
|
||||||
|
* Checks around HeartBtInt configuration [GH 158]
|
||||||
|
* Removed complexity around closing Initiator sessions [GH 159]
|
||||||
|
* Proper FIX logout sequence [GH 160]
|
||||||
|
* Session logic doesn't account for a failure when calling messageStore methods (e.g. persisting a message) [GH 162]
|
||||||
|
* Session event loop [GH 164]
|
||||||
|
* Session event loop follow up [GH 165]
|
||||||
|
* Handle OnLogon/Logout callbacks in user space [GH 167]
|
||||||
|
* Session deadlocks if both initiator and acceptor enter the resend state [GH 169, 179]
|
||||||
|
* Initiator.Stop() does not wait for Acceptor's logout response, causing a resend on next logon [GH 170, 172]
|
||||||
|
* Reset peer timer after logon [GH 171]
|
||||||
|
* Ensure OnLogon is called even if seq num too high [GH 174]
|
||||||
|
* increment target seq num on logout [GH 177]
|
||||||
|
* fixes bogus resend logic [GH 178]
|
||||||
|
* Session forgets it is in resend state [GH 180, 181]
|
||||||
|
* fixes donotsend logic [GH 185]
|
||||||
|
|
||||||
|
## 0.3.0 (June 3, 2016)
|
||||||
|
|
||||||
|
FEATURES
|
||||||
|
|
||||||
|
* ValidateFieldsOutOfOrder Configuration Option [GH 107]
|
||||||
|
|
||||||
|
ENHANCEMENTS
|
||||||
|
|
||||||
|
* Datadictionary tests [GH 108]
|
||||||
|
* Proposal to add public method to convert raw fix message to quickfix.Message [GH 110]
|
||||||
|
* Make gen package public [GH 113]
|
||||||
|
* Make gen import path relative [GH 119]
|
||||||
|
* Validator interface [GH 120]
|
||||||
|
* Expose IncorrectDataFormat [GH 121]
|
||||||
|
* Spelling, fmtness [GH 123]
|
||||||
|
* More verbose error text on conditionally required field BMR [GH 131]
|
||||||
|
* better error handling in gen package [GH 134]
|
||||||
|
* Include timestamp in messages file log [GH 135]
|
||||||
|
* extracts repeating group interface [GH 137]
|
||||||
|
* Header, Body, Trailer FieldMap types [GH 138]
|
||||||
|
* Datadictionary/Gen refactor [GH 140]
|
||||||
|
* Gen value timestamp [GH 141]
|
||||||
|
* Slight gen revert [GH 142]
|
||||||
|
* replaced regex with faster impl for float parsing [GH 143]
|
||||||
|
* Expose sql.DB's SetConnMaxLifetime() in settings [GH 144, 139]
|
||||||
|
|
||||||
|
BUG FIXES
|
||||||
|
|
||||||
|
* Routing Incorrect for FIXT [GH 101]
|
||||||
|
* Validation Error for component tag [GH 102]
|
||||||
|
* Unmarshal error for repeating Group [GH 103]
|
||||||
|
* Marshaler/Reflector tries to convert time.Time struct into fix format [GH 109]
|
||||||
|
* nil pointer panic if no config.DataDictionary specified [GH 127]
|
||||||
|
* fixes required group validation error [GH 129]
|
||||||
|
* RefTagID is not known to BusinessMessageReject type [GH 130]
|
||||||
|
|
||||||
|
## 0.2.0 (April 19, 2016)
|
||||||
|
|
||||||
|
FEATURES
|
||||||
|
|
||||||
|
* Persisted Store [GH 32]
|
||||||
|
* Initializer Constructors for Generated Messages [GH 69]
|
||||||
|
* Field Setters for generated messages [GH 70]
|
||||||
|
* Support for optional components, component setters [GH 79]
|
||||||
|
* Setters for repeating groups in components [GH 87]
|
||||||
|
* DB Store [GH 88]
|
||||||
|
|
||||||
|
ENHANCEMENTS
|
||||||
|
|
||||||
|
* Gen refactor [GH 78]
|
||||||
|
* Refactoring data dictionary pkg [GH 93]
|
||||||
|
|
||||||
|
BUG FIXES
|
||||||
|
|
||||||
|
* Initiator panic if connection closed [GH 59]
|
||||||
|
* New logs overrides old ones [GH 72]
|
||||||
|
* Session sending message timeout [GH 80]
|
||||||
|
* Potential FIX50 Market Data marshaling bug [GH 91]
|
||||||
|
* Allow settings values to contain equals signs [GH 97]
|
||||||
|
* Error when trying to unmarshal FIX message (FIX 5.0) [GH 99]
|
||||||
|
|
||||||
|
## 0.1.0 (February 21, 2016)
|
||||||
|
|
||||||
|
* Initial release
|
||||||
18
quickfix/CONTRIBUTING.md
Normal file
18
quickfix/CONTRIBUTING.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Contribution Guidelines
|
||||||
|
|
||||||
|
We welcome pull requests, bug fixes and issue reports.
|
||||||
|
|
||||||
|
Please direct questions about using the library to the [Mailing List](https://groups.google.com/forum/#!forum/quickfixgo).
|
||||||
|
|
||||||
|
Before proposing a large change, please discuss your change by raising an issue.
|
||||||
|
|
||||||
|
## Submitting Changes
|
||||||
|
|
||||||
|
* Push your changes to a topic branch in your fork of the repository
|
||||||
|
* Submit a pull request to the repository in the QuickFIXGo Organization
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
* If you report a bug and do not include a fix, please include a failing test
|
||||||
|
* Generally, contributions without tests will not be accepted
|
||||||
|
* Contributions that fail the automated build will not be accepted
|
||||||
46
quickfix/LICENSE
Normal file
46
quickfix/LICENSE
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
The QuickFIX Software License, Version 1.0
|
||||||
|
|
||||||
|
Copyright (c) 2001- quickfixengine.org 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.
|
||||||
|
|
||||||
|
3. The end-user documentation included with the redistribution,
|
||||||
|
if any, must include the following acknowledgment:
|
||||||
|
"This product includes software developed by
|
||||||
|
quickfixengine.org (http://www.quickfixengine.org/)."
|
||||||
|
Alternately, this acknowledgment may appear in the software itself,
|
||||||
|
if and wherever such third-party acknowledgments normally appear.
|
||||||
|
|
||||||
|
4. The names "QuickFIX" and "quickfixengine.org" must
|
||||||
|
not be used to endorse or promote products derived from this
|
||||||
|
software without prior written permission. For written
|
||||||
|
permission, please contact ask@quickfixengine.org
|
||||||
|
|
||||||
|
5. Products derived from this software may not be called "QuickFIX",
|
||||||
|
nor may "QuickFIX" appear in their name, without prior written
|
||||||
|
permission of quickfixengine.org
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 QUICKFIXENGINE.ORG OR
|
||||||
|
ITS 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.
|
||||||
|
|
||||||
92
quickfix/Makefile
Normal file
92
quickfix/Makefile
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
|
||||||
|
all: vet test
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf gen
|
||||||
|
|
||||||
|
generate: clean
|
||||||
|
mkdir -p gen; cd gen; go run ../cmd/generate-fix/generate-fix.go -pkg-root=quantex.com/qfixdpl/quickfix/gen ../spec/*.xml
|
||||||
|
|
||||||
|
generate-udecimal: clean
|
||||||
|
mkdir -p gen; cd gen; go run ../cmd/generate-fix/generate-fix.go -use-udecimal=true -pkg-root=quantex.com/qfixdpl/quickfix/gen ../spec/*.xml
|
||||||
|
|
||||||
|
fmt:
|
||||||
|
gofmt -l -w -s $(shell find . -type f -name '*.go')
|
||||||
|
|
||||||
|
vet:
|
||||||
|
go vet `go list ./... | grep -v quickfix/gen`
|
||||||
|
|
||||||
|
test:
|
||||||
|
MONGODB_TEST_CXN=mongodb://db:27017 go test -v -cover `go list ./... | grep -v quickfix/gen`
|
||||||
|
|
||||||
|
linters-install:
|
||||||
|
@golangci-lint --version >/dev/null 2>&1 || { \
|
||||||
|
echo "installing linting tools..."; \
|
||||||
|
curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s v1.64.6; \
|
||||||
|
}
|
||||||
|
|
||||||
|
lint: linters-install
|
||||||
|
golangci-lint run
|
||||||
|
|
||||||
|
# An easy way to run the linter without going through the install process -
|
||||||
|
# docker run -t --rm -v $(pwd):/app -w /app golangci/golangci-lint:v1.64.6 golangci-lint run -v
|
||||||
|
# See https://golangci-lint.run/welcome/install/ for more details.
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------
|
||||||
|
# Targets related to running acceptance tests -
|
||||||
|
|
||||||
|
ifdef STORE_TYPE
|
||||||
|
STORE := $(STORE_TYPE)
|
||||||
|
else
|
||||||
|
STORE := memory
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef ACCEPTANCE_SET
|
||||||
|
TEST_SET := $(ACCEPTANCE_SET)
|
||||||
|
else
|
||||||
|
TEST_SET := server
|
||||||
|
endif
|
||||||
|
|
||||||
|
build-test-srv:
|
||||||
|
cd _test; go build -v -o echo_server ./test-server/
|
||||||
|
fix40:
|
||||||
|
cd _test; ./runat.sh cfg/$(TEST_SET)/$@.cfg 5001 $(STORE) "definitions/$(TEST_SET)/$@/*.def"
|
||||||
|
fix41:
|
||||||
|
cd _test; ./runat.sh cfg/$(TEST_SET)/$@.cfg 5002 $(STORE) "definitions/$(TEST_SET)/$@/*.def"
|
||||||
|
fix42:
|
||||||
|
cd _test; ./runat.sh cfg/$(TEST_SET)/$@.cfg 5003 $(STORE) "definitions/$(TEST_SET)/$@/*.def"
|
||||||
|
fix43:
|
||||||
|
cd _test; ./runat.sh cfg/$(TEST_SET)/$@.cfg 5004 $(STORE) "definitions/$(TEST_SET)/$@/*.def"
|
||||||
|
fix44:
|
||||||
|
cd _test; ./runat.sh cfg/$(TEST_SET)/$@.cfg 5005 $(STORE) "definitions/$(TEST_SET)/$@/*.def"
|
||||||
|
fix50:
|
||||||
|
cd _test; ./runat.sh cfg/$(TEST_SET)/$@.cfg 5006 $(STORE) "definitions/$(TEST_SET)/$@/*.def"
|
||||||
|
fix50sp1:
|
||||||
|
cd _test; ./runat.sh cfg/$(TEST_SET)/$@.cfg 5007 $(STORE) "definitions/$(TEST_SET)/$@/*.def"
|
||||||
|
fix50sp2:
|
||||||
|
cd _test; ./runat.sh cfg/$(TEST_SET)/$@.cfg 5008 $(STORE) "definitions/$(TEST_SET)/$@/*.def"
|
||||||
|
|
||||||
|
ACCEPT_SUITE=fix40 fix41 fix42 fix43 fix44 fix50 fix50sp1 fix50sp2
|
||||||
|
accept: $(ACCEPT_SUITE)
|
||||||
|
|
||||||
|
.PHONY: test $(ACCEPT_SUITE)
|
||||||
|
# ---------------------------------------------------------------
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------
|
||||||
|
# These targets are specific to the Github CI Runner -
|
||||||
|
|
||||||
|
build-src:
|
||||||
|
go build -v `go list ./...`
|
||||||
|
|
||||||
|
build: build-src build-test-srv
|
||||||
|
|
||||||
|
test-ci:
|
||||||
|
go test -v -cover `go list ./... | grep -v quickfix/gen`
|
||||||
|
|
||||||
|
generate-ci: clean
|
||||||
|
mkdir -p gen; cd gen; go run ../cmd/generate-fix/generate-fix.go -pkg-root=quantex.com/qfixdpl/quickfix/gen ../spec/$(shell echo $(FIX_TEST) | tr '[:lower:]' '[:upper:]').xml;
|
||||||
|
|
||||||
|
generate-ci-udecimal: clean
|
||||||
|
mkdir -p gen; cd gen; go run ../cmd/generate-fix/generate-fix.go -use-udecimal=true -pkg-root=quantex.com/qfixdpl/quickfix/gen ../spec/$(shell echo $(FIX_TEST) | tr '[:lower:]' '[:upper:]').xml;
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------
|
||||||
156
quickfix/README.md
Normal file
156
quickfix/README.md
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
# QuickFIX/Go
|
||||||
|
|
||||||
|
[](https://quantex.com/qfixdpl/quickfix/actions) [](https://godoc.org/quantex.com/qfixdpl/quickfix) [](https://goreportcard.com/report/quantex.com/qfixdpl/quickfix)
|
||||||
|
|
||||||
|
Open Source [FIX Protocol](http://www.fixprotocol.org/) library implemented in Go
|
||||||
|
|
||||||
|
### Looking for help with `MessageStore` syntax changes?
|
||||||
|
See v0.9.0 release notes [here](https://quantex.com/qfixdpl/quickfix/releases/tag/v0.9.0)
|
||||||
|
|
||||||
|
|
||||||
|
## About
|
||||||
|
<p>QuickFIX/Go is a <a href="https://www.fixtrading.org/">FIX Protocol Community</a> implementation for the <a href="https://golang.org">Go programming language</a>.</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>100% free and open source with a liberal <a href="https://quantex.com/qfixdpl/quickfix/blob/master/LICENSE.txt">license</a></li>
|
||||||
|
<li>Supports FIX versions 4.0 - 5.0SP2</li>
|
||||||
|
<li>Runs on any hardware and operating system supported by Go (1.21+ required)</li>
|
||||||
|
<li>Spec driven run-time message validation</li>
|
||||||
|
<li>Spec driven code generation of type-safe FIX messages, fields, and repeating groups</li>
|
||||||
|
<li>Support for protocol customizations</li>
|
||||||
|
<li>Session state storage options: SQL, MongoDB, On-disk, or In-memory</li>
|
||||||
|
<li>Logging options: File, Screen</li>
|
||||||
|
<li>Failover and High Availability</li>
|
||||||
|
<li>Daily and weekly scheduling of session connections</li>
|
||||||
|
<li>Integrated support for SSL communicaitons</li>
|
||||||
|
<li>Automated unit and acceptance tests</li>
|
||||||
|
<li><a href="https://www.connamara.com/">Commercial Support available</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<img width="208" alt="Sponsored by Connamara" src="https://user-images.githubusercontent.com/3065126/282546730-16220337-4960-48ae-8c2f-760fbaedb135.png">
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
With [Go module](https://github.com/golang/go/wiki/Modules) support, simply add the following import
|
||||||
|
|
||||||
|
```
|
||||||
|
import "quantex.com/qfixdpl/quickfix"
|
||||||
|
```
|
||||||
|
|
||||||
|
to your code, and then `go [build|run|test]` will automatically fetch the necessary dependencies.
|
||||||
|
|
||||||
|
Otherwise, run the following Go command to install the `quickfix` package:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
go get -u quantex.com/qfixdpl/quickfix
|
||||||
|
```
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
* [QuickFIX User Manual](https://quickfixengine.org/go/documentation/)
|
||||||
|
* [Go API Documentation](https://godoc.org/quantex.com/qfixdpl/quickfix)
|
||||||
|
* See [examples](https://github.com/quickfixgo/examples) for some simple examples of using QuickFIX/Go.
|
||||||
|
|
||||||
|
## FIX Messaging Model
|
||||||
|
To send and receive messages, your application will need a few additional packages.
|
||||||
|
|
||||||
|
QuickFIX/Go maintains separate packages for tags, fields, enums, messages, and message components auto-generated from the FIX 4.0 - FIX5.0SP2 XML specifications-
|
||||||
|
|
||||||
|
* [Tag](https://github.com/quickfixgo/tag)
|
||||||
|
* [Field](https://github.com/quickfixgo/field)
|
||||||
|
* [Enum](https://github.com/quickfixgo/enum)
|
||||||
|
* [FIX 4.0](https://github.com/quickfixgo/fix40)
|
||||||
|
* [FIX 4.1](https://github.com/quickfixgo/fix41)
|
||||||
|
* [FIX 4.2](https://github.com/quickfixgo/fix42)
|
||||||
|
* [FIX 4.3](https://github.com/quickfixgo/fix43)
|
||||||
|
* [FIX 4.4](https://github.com/quickfixgo/fix44)
|
||||||
|
* [FIX 5.0](https://github.com/quickfixgo/fix50)
|
||||||
|
* [FIX 5.0 SP1](https://github.com/quickfixgo/fix50sp1)
|
||||||
|
* [FIX 5.0 SP2](https://github.com/quickfixgo/fix50sp2)
|
||||||
|
* [FIXT 1.1](https://github.com/quickfixgo/fixt11)
|
||||||
|
|
||||||
|
For most FIX applications, these generated resources are sufficient. Custom FIX applications may generate source specific to the FIX spec of that application using the `generate-fix` tool included with QuickFIX/Go.
|
||||||
|
|
||||||
|
Following installation, `generate-fix` is installed to `$GOPATH/bin/generate-fix`. Run `$GOPATH/bin/generate-fix --help` for usage instructions.
|
||||||
|
|
||||||
|
## General Support
|
||||||
|
<h3>Github Discussions</h3>
|
||||||
|
|
||||||
|
<p>Our <a href="https://quantex.com/qfixdpl/quickfix/discussions/categories/q-a">Github Discussions Board</a> is free, public, and easily searchable. It’s the preferred method of user support from the QuickFIX/Go team.
|
||||||
|
|
||||||
|
<p>Please provide as much detail as you can when asking a question, and include relevant configurations and code snippets.</p>
|
||||||
|
|
||||||
|
<h3>FIX Protocol</h3>
|
||||||
|
|
||||||
|
<p>More information about the FIX protocol can be found at the <a href="http://fixtradingcommunity.org">FIX Protocol website</a>.
|
||||||
|
|
||||||
|
<h3>Bugs and Issues</h3>
|
||||||
|
|
||||||
|
<p>Bugs and issues can be submitted by anyone through our GitHub repository issues list.</p>
|
||||||
|
|
||||||
|
<p><strong>Note:</strong> Please do not submit questions or help requests to the issues list. It is for bugs and issues. If you need help, please use the Discussions board as described above and you’ll be able to send your question to the entire community.</p>
|
||||||
|
|
||||||
|
<p><a href="https://quantex.com/qfixdpl/quickfix/issues">GitHub Issues</a></p>
|
||||||
|
|
||||||
|
<p>Please provide sample code, logs, and a description of the problem when the issue is submitted.</p>
|
||||||
|
|
||||||
|
<p>We will try to address new issues as quickly as possible, and we welcome contributions for bug fixes and new features!</p>
|
||||||
|
|
||||||
|
## Commercial Support
|
||||||
|
<p><a href="https://connamara.com">Connamara Systems</a> offers commercial support for developers who are integrating any of the QuickFIX implementations (Go, C++, Java, .NET). The support is offered in 10-hour bundles and grants developers access, via telephone or email, to the team that created QuickFIX/Go, QuickFIX/n, and are maintainers of QuickFIX.</p>
|
||||||
|
|
||||||
|
<p>In addition to offering QuickFIX support, Connamara delivers Made-To-Measure Trading Solutions by bridging the gap between buy and build. By using internally developed trading platform components, Connamara delivers the best of off-the-shelf ISV solutions and custom application development. Coupled with Connamara’s unique licensing model, trading firms can get the best of both build and buy.</p>
|
||||||
|
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
If you wish to work on QuickFIX/Go itself, you will need [Docker](https://docs.docker.com/get-docker/) and [VSCode](https://code.visualstudio.com/download) on your machine.
|
||||||
|
|
||||||
|
* Clone the repo and open it with VSCode with Docker running
|
||||||
|
* This repo comes with vscode devcontainer configs in `./.devcontainer/`
|
||||||
|
* Click the pop-up to re-open the project in the Dev Container
|
||||||
|
* This opens the project in a docker container pre-configured with everything you need
|
||||||
|
|
||||||
|
### Build and Test
|
||||||
|
|
||||||
|
The default make target runs [go vet](https://godoc.org/golang.org/x/tools/cmd/vet) and unit tests.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
make
|
||||||
|
```
|
||||||
|
|
||||||
|
If this exits with exit status 0, then everything is working!
|
||||||
|
|
||||||
|
### Generated Code
|
||||||
|
|
||||||
|
Generated code from the FIX40-FIX50SP2 specs are available as separate repos under the [QuickFIX/Go organization](https://github.com/quickfixgo). The source specifications for this generated code is located in `spec/`. Generated code can be identified by the `.generated.go` suffix. Any changes to generated code must be captured by changes to source in `cmd/generate-fix`. After making changes to the code generator source, run the following to re-generate the source
|
||||||
|
|
||||||
|
```sh
|
||||||
|
make generate
|
||||||
|
```
|
||||||
|
|
||||||
|
If you are making changes to the generated code, please create Pull Requests for these changes for the affected repos.
|
||||||
|
|
||||||
|
### Acceptance Tests
|
||||||
|
|
||||||
|
QuickFIX/Go has a comprehensive acceptance test suite covering the FIX protocol. These are the same tests used across all QuickFIX implementations.
|
||||||
|
|
||||||
|
QuickFIX/Go acceptance tests depend on ruby in path, if you are using the dev container, it is already installed
|
||||||
|
|
||||||
|
To run acceptance tests,
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# generate code locally
|
||||||
|
make generate
|
||||||
|
|
||||||
|
# build acceptance test rig
|
||||||
|
make build-test-srv
|
||||||
|
|
||||||
|
# run acceptance tests
|
||||||
|
make accept
|
||||||
|
```
|
||||||
|
|
||||||
|
## Licensing
|
||||||
|
|
||||||
|
This software is available under the QuickFIX Software License. Please see the [LICENSE.txt](https://quantex.com/qfixdpl/quickfix/blob/main/LICENSE.txt) for the terms specified by the QuickFIX Software License.
|
||||||
6
quickfix/_sql/embed.go
Normal file
6
quickfix/_sql/embed.go
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
package sql
|
||||||
|
|
||||||
|
import "embed"
|
||||||
|
|
||||||
|
//go:embed mssql mysql oracle postgresql sqlite3
|
||||||
|
var FS embed.FS
|
||||||
1
quickfix/_sql/mssql/create.bat
Normal file
1
quickfix/_sql/mssql/create.bat
Normal file
@ -0,0 +1 @@
|
|||||||
|
osql -U sa -P -i quickfix_database.sql
|
||||||
65
quickfix/_sql/mssql/quickfix_database.sql
Normal file
65
quickfix/_sql/mssql/quickfix_database.sql
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
DROP DATABASE quickfix;
|
||||||
|
CREATE DATABASE quickfix;
|
||||||
|
|
||||||
|
USE quickfix;
|
||||||
|
CREATE TABLE sessions (
|
||||||
|
beginstring CHAR(8) NOT NULL,
|
||||||
|
sendercompid VARCHAR(64) NOT NULL,
|
||||||
|
sendersubid VARCHAR(64) NOT NULL,
|
||||||
|
senderlocid VARCHAR(64) NOT NULL,
|
||||||
|
targetcompid VARCHAR(64) NOT NULL,
|
||||||
|
targetsubid VARCHAR(64) NOT NULL,
|
||||||
|
targetlocid VARCHAR(64) NOT NULL,
|
||||||
|
session_qualifier VARCHAR(64) NOT NULL,
|
||||||
|
creation_time DATETIME NOT NULL,
|
||||||
|
incoming_seqnum INT NOT NULL,
|
||||||
|
outgoing_seqnum INT NOT NULL,
|
||||||
|
PRIMARY KEY (beginstring, sendercompid, sendersubid, senderlocid,
|
||||||
|
targetcompid, targetsubid, targetlocid, session_qualifier)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE messages (
|
||||||
|
beginstring CHAR(8) NOT NULL,
|
||||||
|
sendercompid VARCHAR(64) NOT NULL,
|
||||||
|
sendersubid VARCHAR(64) NOT NULL,
|
||||||
|
senderlocid VARCHAR(64) NOT NULL,
|
||||||
|
targetcompid VARCHAR(64) NOT NULL,
|
||||||
|
targetsubid VARCHAR(64) NOT NULL,
|
||||||
|
targetlocid VARCHAR(64) NOT NULL,
|
||||||
|
session_qualifier VARCHAR(64) NOT NULL,
|
||||||
|
msgseqnum INT NOT NULL,
|
||||||
|
message TEXT NOT NULL,
|
||||||
|
PRIMARY KEY (beginstring, sendercompid, sendersubid, senderlocid,
|
||||||
|
targetcompid, targetsubid, targetlocid, session_qualifier,
|
||||||
|
msgseqnum)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE event_log (
|
||||||
|
id INT NOT NULL IDENTITY,
|
||||||
|
time DATETIME NOT NULL,
|
||||||
|
beginstring CHAR(8) NOT NULL,
|
||||||
|
sendercompid VARCHAR(64) NOT NULL,
|
||||||
|
sendersubid VARCHAR(64) NOT NULL,
|
||||||
|
senderlocid VARCHAR(64) NOT NULL,
|
||||||
|
targetcompid VARCHAR(64) NOT NULL,
|
||||||
|
targetsubid VARCHAR(64) NOT NULL,
|
||||||
|
targetlocid VARCHAR(64) NOT NULL,
|
||||||
|
session_qualifier VARCHAR(64) NOT NULL,
|
||||||
|
text TEXT NOT NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE messages_log (
|
||||||
|
id INT NOT NULL IDENTITY,
|
||||||
|
time DATETIME NOT NULL,
|
||||||
|
beginstring CHAR(8) NOT NULL,
|
||||||
|
sendercompid VARCHAR(64) NOT NULL,
|
||||||
|
sendersubid VARCHAR(64) NOT NULL,
|
||||||
|
senderlocid VARCHAR(64) NOT NULL,
|
||||||
|
targetcompid VARCHAR(64) NOT NULL,
|
||||||
|
targetsubid VARCHAR(64) NOT NULL,
|
||||||
|
targetlocid VARCHAR(64) NOT NULL,
|
||||||
|
session_qualifier VARCHAR(64) NOT NULL,
|
||||||
|
text TEXT NOT NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
);
|
||||||
1
quickfix/_sql/mysql/create.bat
Normal file
1
quickfix/_sql/mysql/create.bat
Normal file
@ -0,0 +1 @@
|
|||||||
|
mysql -u root --execute="source mysql.sql";
|
||||||
1
quickfix/_sql/mysql/create.sh
Normal file
1
quickfix/_sql/mysql/create.sh
Normal file
@ -0,0 +1 @@
|
|||||||
|
mysql -u root --execute="source mysql.sql";
|
||||||
18
quickfix/_sql/mysql/event_log_table.sql
Normal file
18
quickfix/_sql/mysql/event_log_table.sql
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
USE quickfix;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS event_log;
|
||||||
|
|
||||||
|
CREATE TABLE event_log (
|
||||||
|
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
time DATETIME NOT NULL,
|
||||||
|
beginstring CHAR(8) NOT NULL,
|
||||||
|
sendercompid VARCHAR(64) NOT NULL,
|
||||||
|
sendersubid VARCHAR(64) NOT NULL,
|
||||||
|
senderlocid VARCHAR(64) NOT NULL,
|
||||||
|
targetcompid VARCHAR(64) NOT NULL,
|
||||||
|
targetsubid VARCHAR(64) NOT NULL,
|
||||||
|
targetlocid VARCHAR(64) NOT NULL,
|
||||||
|
session_qualifier VARCHAR(64),
|
||||||
|
text TEXT NOT NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
);
|
||||||
18
quickfix/_sql/mysql/messages_log_table.sql
Normal file
18
quickfix/_sql/mysql/messages_log_table.sql
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
USE quickfix;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS messages_log;
|
||||||
|
|
||||||
|
CREATE TABLE messages_log (
|
||||||
|
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
time DATETIME NOT NULL,
|
||||||
|
beginstring CHAR(8) NOT NULL,
|
||||||
|
sendercompid VARCHAR(64) NOT NULL,
|
||||||
|
sendersubid VARCHAR(64) NOT NULL,
|
||||||
|
senderlocid VARCHAR(64) NOT NULL,
|
||||||
|
targetcompid VARCHAR(64) NOT NULL,
|
||||||
|
targetsubid VARCHAR(64) NOT NULL,
|
||||||
|
targetlocid VARCHAR(64) NOT NULL,
|
||||||
|
session_qualifier VARCHAR(64) NOT NULL,
|
||||||
|
text TEXT NOT NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
);
|
||||||
19
quickfix/_sql/mysql/messages_table.sql
Normal file
19
quickfix/_sql/mysql/messages_table.sql
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
USE quickfix;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS messages;
|
||||||
|
|
||||||
|
CREATE TABLE messages (
|
||||||
|
beginstring CHAR(8) NOT NULL,
|
||||||
|
sendercompid VARCHAR(64) NOT NULL,
|
||||||
|
sendersubid VARCHAR(64) NOT NULL,
|
||||||
|
senderlocid VARCHAR(64) NOT NULL,
|
||||||
|
targetcompid VARCHAR(64) NOT NULL,
|
||||||
|
targetsubid VARCHAR(64) NOT NULL,
|
||||||
|
targetlocid VARCHAR(64) NOT NULL,
|
||||||
|
session_qualifier VARCHAR(64) NOT NULL,
|
||||||
|
msgseqnum INT NOT NULL,
|
||||||
|
message TEXT NOT NULL,
|
||||||
|
PRIMARY KEY (beginstring, sendercompid, sendersubid, senderlocid,
|
||||||
|
targetcompid, targetsubid, targetlocid, session_qualifier,
|
||||||
|
msgseqnum)
|
||||||
|
);
|
||||||
5
quickfix/_sql/mysql/mysql.sql
Normal file
5
quickfix/_sql/mysql/mysql.sql
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
source quickfix_database.sql;
|
||||||
|
source sessions_table.sql;
|
||||||
|
source messages_table.sql;
|
||||||
|
source messages_log_table.sql;
|
||||||
|
source event_log_table.sql;
|
||||||
2
quickfix/_sql/mysql/quickfix_database.sql
Normal file
2
quickfix/_sql/mysql/quickfix_database.sql
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
DROP DATABASE IF EXISTS quickfix;
|
||||||
|
CREATE DATABASE quickfix;
|
||||||
19
quickfix/_sql/mysql/sessions_table.sql
Normal file
19
quickfix/_sql/mysql/sessions_table.sql
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
USE quickfix;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS sessions;
|
||||||
|
|
||||||
|
CREATE TABLE sessions (
|
||||||
|
beginstring CHAR(8) NOT NULL,
|
||||||
|
sendercompid VARCHAR(64) NOT NULL,
|
||||||
|
sendersubid VARCHAR(64) NOT NULL,
|
||||||
|
senderlocid VARCHAR(64) NOT NULL,
|
||||||
|
targetcompid VARCHAR(64) NOT NULL,
|
||||||
|
targetsubid VARCHAR(64) NOT NULL,
|
||||||
|
targetlocid VARCHAR(64) NOT NULL,
|
||||||
|
session_qualifier VARCHAR(64) NOT NULL,
|
||||||
|
creation_time DATETIME NOT NULL,
|
||||||
|
incoming_seqnum INT NOT NULL,
|
||||||
|
outgoing_seqnum INT NOT NULL,
|
||||||
|
PRIMARY KEY (beginstring, sendercompid, sendersubid, senderlocid,
|
||||||
|
targetcompid, targetsubid, targetlocid, session_qualifier)
|
||||||
|
);
|
||||||
14
quickfix/_sql/oracle/messages_table.sql
Normal file
14
quickfix/_sql/oracle/messages_table.sql
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
CREATE TABLE messages (
|
||||||
|
beginstring VARCHAR2(8) NOT NULL,
|
||||||
|
sendercompid VARCHAR2(64) NOT NULL,
|
||||||
|
sendersubid VARCHAR2(64) NOT NULL,
|
||||||
|
senderlocid VARCHAR2(64) NOT NULL,
|
||||||
|
targetcompid VARCHAR2(64) NOT NULL,
|
||||||
|
targetsubid VARCHAR2(64) NOT NULL,
|
||||||
|
targetlocid VARCHAR2(64) NOT NULL,
|
||||||
|
session_qualifier VARCHAR2(64) NOT NULL,
|
||||||
|
msgseqnum INTEGER NOT NULL,
|
||||||
|
message VARCHAR2(4000) NOT NULL,
|
||||||
|
PRIMARY KEY (beginstring, sendercompid, sendersubid, senderlocid,
|
||||||
|
targetcompid, targetsubid, targetlocid, session_qualifier, msgseqnum)
|
||||||
|
);
|
||||||
15
quickfix/_sql/oracle/sessions_table.sql
Normal file
15
quickfix/_sql/oracle/sessions_table.sql
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
CREATE TABLE sessions (
|
||||||
|
beginstring VARCHAR2(8) NOT NULL,
|
||||||
|
sendercompid VARCHAR2(64) NOT NULL,
|
||||||
|
sendersubid VARCHAR2(64) NOT NULL,
|
||||||
|
senderlocid VARCHAR2(64) NOT NULL,
|
||||||
|
targetcompid VARCHAR2(64) NOT NULL,
|
||||||
|
targetsubid VARCHAR2(64) NOT NULL,
|
||||||
|
targetlocid VARCHAR2(64) NOT NULL,
|
||||||
|
session_qualifier VARCHAR2(64) NOT NULL,
|
||||||
|
creation_time TIMESTAMP NOT NULL,
|
||||||
|
incoming_seqnum INTEGER NOT NULL,
|
||||||
|
outgoing_seqnum INTEGER NOT NULL,
|
||||||
|
PRIMARY KEY (beginstring, sendercompid, sendersubid, senderlocid,
|
||||||
|
targetcompid, targetsubid, targetlocid, session_qualifier)
|
||||||
|
);
|
||||||
3
quickfix/_sql/postgresql/create.bat
Normal file
3
quickfix/_sql/postgresql/create.bat
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
dropdb -U postgres --if-exists quickfix
|
||||||
|
createdb -U postgres quickfix
|
||||||
|
psql -U postgres -d quickfix -f postgresql.sql
|
||||||
3
quickfix/_sql/postgresql/create.sh
Normal file
3
quickfix/_sql/postgresql/create.sh
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
dropdb -U postgres --if-exists quickfix
|
||||||
|
createdb -U postgres quickfix
|
||||||
|
psql -U postgres -d quickfix -f postgresql.sql
|
||||||
16
quickfix/_sql/postgresql/event_log_table.sql
Normal file
16
quickfix/_sql/postgresql/event_log_table.sql
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
CREATE SEQUENCE event_log_sequence;
|
||||||
|
|
||||||
|
CREATE TABLE event_log (
|
||||||
|
id INTEGER DEFAULT NEXTVAL('event_log_sequence'),
|
||||||
|
time TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||||
|
beginstring CHAR(8) NOT NULL,
|
||||||
|
sendercompid VARCHAR(64) NOT NULL,
|
||||||
|
sendersubid VARCHAR(64) NOT NULL,
|
||||||
|
senderlocid VARCHAR(64) NOT NULL,
|
||||||
|
targetcompid VARCHAR(64) NOT NULL,
|
||||||
|
targetsubid VARCHAR(64) NOT NULL,
|
||||||
|
targetlocid VARCHAR(64) NOT NULL,
|
||||||
|
session_qualifier VARCHAR(64),
|
||||||
|
text TEXT NOT NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
);
|
||||||
16
quickfix/_sql/postgresql/messages_log_table.sql
Normal file
16
quickfix/_sql/postgresql/messages_log_table.sql
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
CREATE SEQUENCE messages_log_sequence;
|
||||||
|
|
||||||
|
CREATE TABLE messages_log (
|
||||||
|
id INTEGER DEFAULT NEXTVAL('messages_log_sequence'),
|
||||||
|
time TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||||
|
beginstring CHAR(8) NOT NULL,
|
||||||
|
sendercompid VARCHAR(64) NOT NULL,
|
||||||
|
sendersubid VARCHAR(64) NOT NULL,
|
||||||
|
senderlocid VARCHAR(64) NOT NULL,
|
||||||
|
targetcompid VARCHAR(64) NOT NULL,
|
||||||
|
targetsubid VARCHAR(64) NOT NULL,
|
||||||
|
targetlocid VARCHAR(64) NOT NULL,
|
||||||
|
session_qualifier VARCHAR(64),
|
||||||
|
text TEXT NOT NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
);
|
||||||
15
quickfix/_sql/postgresql/messages_table.sql
Normal file
15
quickfix/_sql/postgresql/messages_table.sql
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
CREATE TABLE messages (
|
||||||
|
beginstring CHAR(8) NOT NULL,
|
||||||
|
sendercompid VARCHAR(64) NOT NULL,
|
||||||
|
sendersubid VARCHAR(64) NOT NULL,
|
||||||
|
senderlocid VARCHAR(64) NOT NULL,
|
||||||
|
targetcompid VARCHAR(64) NOT NULL,
|
||||||
|
targetsubid VARCHAR(64) NOT NULL,
|
||||||
|
targetlocid VARCHAR(64) NOT NULL,
|
||||||
|
session_qualifier VARCHAR(64) NOT NULL,
|
||||||
|
msgseqnum INTEGER NOT NULL,
|
||||||
|
message TEXT NOT NULL,
|
||||||
|
PRIMARY KEY (beginstring, sendercompid, sendersubid, senderlocid,
|
||||||
|
targetcompid, targetsubid, targetlocid, session_qualifier,
|
||||||
|
msgseqnum)
|
||||||
|
);
|
||||||
4
quickfix/_sql/postgresql/postgresql.sql
Normal file
4
quickfix/_sql/postgresql/postgresql.sql
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
\i sessions_table.sql;
|
||||||
|
\i messages_table.sql;
|
||||||
|
\i messages_log_table.sql;
|
||||||
|
\i event_log_table.sql;
|
||||||
15
quickfix/_sql/postgresql/sessions_table.sql
Normal file
15
quickfix/_sql/postgresql/sessions_table.sql
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
CREATE TABLE sessions (
|
||||||
|
beginstring CHAR(8) NOT NULL,
|
||||||
|
sendercompid VARCHAR(64) NOT NULL,
|
||||||
|
sendersubid VARCHAR(64) NOT NULL,
|
||||||
|
senderlocid VARCHAR(64) NOT NULL,
|
||||||
|
targetcompid VARCHAR(64) NOT NULL,
|
||||||
|
targetsubid VARCHAR(64) NOT NULL,
|
||||||
|
targetlocid VARCHAR(64) NOT NULL,
|
||||||
|
session_qualifier VARCHAR(64) NOT NULL,
|
||||||
|
creation_time TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||||
|
incoming_seqnum INTEGER NOT NULL,
|
||||||
|
outgoing_seqnum INTEGER NOT NULL,
|
||||||
|
PRIMARY KEY (beginstring, sendercompid, sendersubid, senderlocid,
|
||||||
|
targetcompid, targetsubid, targetlocid, session_qualifier)
|
||||||
|
);
|
||||||
15
quickfix/_sql/sqlite3/event_log_table.sql
Normal file
15
quickfix/_sql/sqlite3/event_log_table.sql
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
DROP TABLE IF EXISTS event_log;
|
||||||
|
|
||||||
|
CREATE TABLE event_log (
|
||||||
|
id INTEGER PRIMARY KEY NOT NULL,
|
||||||
|
time DATETIME NOT NULL,
|
||||||
|
beginstring CHAR(8) NOT NULL,
|
||||||
|
sendercompid VARCHAR(64) NOT NULL,
|
||||||
|
sendersubid VARCHAR(64) NOT NULL,
|
||||||
|
senderlocid VARCHAR(64) NOT NULL,
|
||||||
|
targetcompid VARCHAR(64) NOT NULL,
|
||||||
|
targetsubid VARCHAR(64) NOT NULL,
|
||||||
|
targetlocid VARCHAR(64) NOT NULL,
|
||||||
|
session_qualifier VARCHAR(64),
|
||||||
|
text TEXT NOT NULL
|
||||||
|
);
|
||||||
15
quickfix/_sql/sqlite3/messages_log_table.sql
Normal file
15
quickfix/_sql/sqlite3/messages_log_table.sql
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
DROP TABLE IF EXISTS messages_log;
|
||||||
|
|
||||||
|
CREATE TABLE messages_log (
|
||||||
|
id INTEGER PRIMARY KEY NOT NULL,
|
||||||
|
time DATETIME NOT NULL,
|
||||||
|
beginstring CHAR(8) NOT NULL,
|
||||||
|
sendercompid VARCHAR(64) NOT NULL,
|
||||||
|
sendersubid VARCHAR(64) NOT NULL,
|
||||||
|
senderlocid VARCHAR(64) NOT NULL,
|
||||||
|
targetcompid VARCHAR(64) NOT NULL,
|
||||||
|
targetsubid VARCHAR(64) NOT NULL,
|
||||||
|
targetlocid VARCHAR(64) NOT NULL,
|
||||||
|
session_qualifier VARCHAR(64) NOT NULL,
|
||||||
|
text TEXT NOT NULL
|
||||||
|
);
|
||||||
17
quickfix/_sql/sqlite3/messages_table.sql
Normal file
17
quickfix/_sql/sqlite3/messages_table.sql
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
DROP TABLE IF EXISTS messages;
|
||||||
|
|
||||||
|
CREATE TABLE messages (
|
||||||
|
beginstring CHAR(8) NOT NULL,
|
||||||
|
sendercompid VARCHAR(64) NOT NULL,
|
||||||
|
sendersubid VARCHAR(64) NOT NULL,
|
||||||
|
senderlocid VARCHAR(64) NOT NULL,
|
||||||
|
targetcompid VARCHAR(64) NOT NULL,
|
||||||
|
targetsubid VARCHAR(64) NOT NULL,
|
||||||
|
targetlocid VARCHAR(64) NOT NULL,
|
||||||
|
session_qualifier VARCHAR(64) NOT NULL,
|
||||||
|
msgseqnum INT NOT NULL,
|
||||||
|
message TEXT NOT NULL,
|
||||||
|
PRIMARY KEY (beginstring, sendercompid, sendersubid, senderlocid,
|
||||||
|
targetcompid, targetsubid, targetlocid, session_qualifier,
|
||||||
|
msgseqnum)
|
||||||
|
);
|
||||||
17
quickfix/_sql/sqlite3/sessions_table.sql
Normal file
17
quickfix/_sql/sqlite3/sessions_table.sql
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
DROP TABLE IF EXISTS sessions;
|
||||||
|
|
||||||
|
CREATE TABLE sessions (
|
||||||
|
beginstring CHAR(8) NOT NULL,
|
||||||
|
sendercompid VARCHAR(64) NOT NULL,
|
||||||
|
sendersubid VARCHAR(64) NOT NULL,
|
||||||
|
senderlocid VARCHAR(64) NOT NULL,
|
||||||
|
targetcompid VARCHAR(64) NOT NULL,
|
||||||
|
targetsubid VARCHAR(64) NOT NULL,
|
||||||
|
targetlocid VARCHAR(64) NOT NULL,
|
||||||
|
session_qualifier VARCHAR(64) NOT NULL,
|
||||||
|
creation_time DATETIME NOT NULL,
|
||||||
|
incoming_seqnum INT NOT NULL,
|
||||||
|
outgoing_seqnum INT NOT NULL,
|
||||||
|
PRIMARY KEY (beginstring, sendercompid, sendersubid, senderlocid,
|
||||||
|
targetcompid, targetsubid, targetlocid, session_qualifier)
|
||||||
|
);
|
||||||
72
quickfix/_test/Comparator.rb
Normal file
72
quickfix/_test/Comparator.rb
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
#****************************************************************************
|
||||||
|
# Copyright (c) quickfixengine.org All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of the QuickFIX FIX Engine
|
||||||
|
#
|
||||||
|
# This file may be distributed under the terms of the quickfixengine.org
|
||||||
|
# license as defined by quickfixengine.org and appearing in the file
|
||||||
|
# LICENSE included in the packaging of this file.
|
||||||
|
#
|
||||||
|
# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||||
|
# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
#
|
||||||
|
# See http://www.quickfixengine.org/LICENSE for licensing information.
|
||||||
|
#
|
||||||
|
# Contact ask@quickfixengine.org if any conditions of this licensing are
|
||||||
|
# not clear to you.
|
||||||
|
#****************************************************************************
|
||||||
|
|
||||||
|
class Comparator < Hash
|
||||||
|
|
||||||
|
def initialize(patterns)
|
||||||
|
patterns.each_line do
|
||||||
|
| line |
|
||||||
|
line.chomp!
|
||||||
|
array = line.split("=")
|
||||||
|
num = array[0].to_i
|
||||||
|
regex = Regexp.new(array[1])
|
||||||
|
self[num] = regex;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def compare(left, right)
|
||||||
|
@reason = nil
|
||||||
|
left_array = left.split("\001")
|
||||||
|
right_array = right.split("\001")
|
||||||
|
# check for number of fields
|
||||||
|
if left_array.size != right_array.size
|
||||||
|
@reason = "Number of fields do not match"
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
left_array.each_index do
|
||||||
|
| index |
|
||||||
|
left_field = left_array[index].split("=")
|
||||||
|
right_field = right_array[index].split("=")
|
||||||
|
# check if field is in same order
|
||||||
|
if left_field[0] != right_field[0]
|
||||||
|
@reason = "Expected field (" + left_field[0] + ") but found field (" + right_field[0] + ")"
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
regexp = self[left_field[0].to_i]
|
||||||
|
# do a straight comparison or regex comparison
|
||||||
|
if regexp == nil
|
||||||
|
if left_field[1] != right_field[1]
|
||||||
|
@reason = "Value in field (" + left_field[0] + ") should be (" + left_field[1] + ") but was (" + right_field[1] + ")"
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if !(regexp === right_field[1])
|
||||||
|
@reason = "Field (" + left_field[0] + ") does not match pattern"
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
def reason()
|
||||||
|
return @reason
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
37
quickfix/_test/ComparatorTestCase.rb
Normal file
37
quickfix/_test/ComparatorTestCase.rb
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
require 'Comparator'
|
||||||
|
require 'runit/testcase'
|
||||||
|
|
||||||
|
class ComparatorTestCase < RUNIT::TestCase
|
||||||
|
|
||||||
|
def test_parsePatterns
|
||||||
|
patterns = "10=\\d{1,3}\n52=\\d{8}-\\d2:\\d2:\\d2\n"
|
||||||
|
comp = Comparator.new(patterns)
|
||||||
|
assert_equals(/\d{1,3}/, comp[10])
|
||||||
|
assert_equals(/\d{8}-\d2:\d2:\d2/, comp[52])
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_compare
|
||||||
|
patterns = "10=\\d{1,3}\n52=\\d{8}-\\d{2}:\\d{2}:\\d{2}\n"
|
||||||
|
comp = Comparator.new(patterns)
|
||||||
|
# matching fields
|
||||||
|
assert(comp.compare("1=hello\0012=goodbye\001", "1=hello\0012=goodbye\001"))
|
||||||
|
assert(comp.reason == nil)
|
||||||
|
# non-matching field
|
||||||
|
assert(!comp.compare("1=helloo\0012=goodbye\001", "1=hello\0012=goodbye\001"))
|
||||||
|
assert(comp.reason == "Value in field (1) should be (helloo) but was (hello)")
|
||||||
|
# out of order fields
|
||||||
|
assert(!comp.compare("2=hello\0011=goodbye\001", "1=hello\0012=goodbye\001"))
|
||||||
|
assert(comp.reason == "Expected field (2) but found field (1)")
|
||||||
|
# different number of fields
|
||||||
|
assert(!comp.compare("1=hello\001", "1=hello\0012=goodbye\001"))
|
||||||
|
assert(comp.reason == "Number of fields do not match")
|
||||||
|
# mathing non-deterministic field
|
||||||
|
assert(comp.compare(
|
||||||
|
"1=hello\0012=goodbye\00152=12345678-12:23:34\001", "1=hello\0012=goodbye\00152=87654321-98:87:76\001"))
|
||||||
|
# non-matching non-deterministic field
|
||||||
|
assert(!comp.compare(
|
||||||
|
"1=hello\0012=goodbye\00152=12345678-12:23:34\001", "1=hello\0012=goodbye\00152=7654321-98:87:76\001"))
|
||||||
|
assert(comp.reason == "Field (52) does not match pattern")
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
53
quickfix/_test/FixParser.rb
Normal file
53
quickfix/_test/FixParser.rb
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#****************************************************************************
|
||||||
|
# Copyright (c) quickfixengine.org All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of the QuickFIX FIX Engine
|
||||||
|
#
|
||||||
|
# This file may be distributed under the terms of the quickfixengine.org
|
||||||
|
# license as defined by quickfixengine.org and appearing in the file
|
||||||
|
# LICENSE included in the packaging of this file.
|
||||||
|
#
|
||||||
|
# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||||
|
# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
#
|
||||||
|
# See http://www.quickfixengine.org/LICENSE for licensing information.
|
||||||
|
#
|
||||||
|
# Contact ask@quickfixengine.org if any conditions of this licensing are
|
||||||
|
# not clear to you.
|
||||||
|
#****************************************************************************
|
||||||
|
|
||||||
|
require "socket"
|
||||||
|
|
||||||
|
class FixParser
|
||||||
|
|
||||||
|
def initialize(io)
|
||||||
|
@io = io
|
||||||
|
end
|
||||||
|
|
||||||
|
def readFixMessage()
|
||||||
|
if(@io.eof?)
|
||||||
|
raise "Was disconnected, expected data"
|
||||||
|
end
|
||||||
|
|
||||||
|
m = ""
|
||||||
|
# read to begining of MsgLen field
|
||||||
|
m = @io.gets("\0019=")
|
||||||
|
# read contents of MsgLen field
|
||||||
|
length = @io.gets("\001")
|
||||||
|
m += length
|
||||||
|
length.chop!
|
||||||
|
|
||||||
|
# regex checks to make sure length is an integer
|
||||||
|
# if it isn't there is nothing we can do so
|
||||||
|
# close the connection
|
||||||
|
if( (/^\d*$/ === length) == nil )
|
||||||
|
@io.close
|
||||||
|
end
|
||||||
|
# read body
|
||||||
|
m += @io.read(Integer(length))
|
||||||
|
# read CheckSum
|
||||||
|
m += @io.gets("\001")
|
||||||
|
return m
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
46
quickfix/_test/FixParserTestCase.rb
Normal file
46
quickfix/_test/FixParserTestCase.rb
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
require 'FixParser'
|
||||||
|
require 'runit/testcase'
|
||||||
|
require "thread"
|
||||||
|
require 'SocketServer'
|
||||||
|
|
||||||
|
class FixParserTestCase < RUNIT::TestCase
|
||||||
|
|
||||||
|
def test_readFixMessage
|
||||||
|
fixMsg1 = "8=FIX.4.2\0019=12\00135=A\001108=30\00110=31\001"
|
||||||
|
fixMsg2 = "8=FIX.4.2\0019=17\00135=4\00136=88\001123=Y\00110=34\001"
|
||||||
|
|
||||||
|
server = SocketServer.new
|
||||||
|
def server.message=(m)
|
||||||
|
@message = m
|
||||||
|
end
|
||||||
|
|
||||||
|
def server.connectAction(s)
|
||||||
|
end
|
||||||
|
|
||||||
|
def server.receiveAction(s)
|
||||||
|
s.write(@message)
|
||||||
|
end
|
||||||
|
|
||||||
|
def server.disconnectAction(s)
|
||||||
|
end
|
||||||
|
|
||||||
|
server.message = fixMsg1 + fixMsg2
|
||||||
|
Thread.start do
|
||||||
|
server.listen(RUNIT::TestCase.port)
|
||||||
|
end
|
||||||
|
server.wait
|
||||||
|
|
||||||
|
s = TCPSocket.open("localhost", RUNIT::TestCase.port)
|
||||||
|
parser = FixParser.new(s)
|
||||||
|
begin
|
||||||
|
assert_equals(fixMsg1, parser.readFixMessage)
|
||||||
|
assert_equals(fixMsg2, parser.readFixMessage)
|
||||||
|
rescue IOError
|
||||||
|
# I have no idea why this is being thrown
|
||||||
|
end
|
||||||
|
|
||||||
|
s.close
|
||||||
|
server.stop()
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
150
quickfix/_test/Reflector.rb
Normal file
150
quickfix/_test/Reflector.rb
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
#****************************************************************************
|
||||||
|
# Copyright (c) quickfixengine.org All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of the QuickFIX FIX Engine
|
||||||
|
#
|
||||||
|
# This file may be distributed under the terms of the quickfixengine.org
|
||||||
|
# license as defined by quickfixengine.org and appearing in the file
|
||||||
|
# LICENSE included in the packaging of this file.
|
||||||
|
#
|
||||||
|
# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||||
|
# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
#
|
||||||
|
# See http://www.quickfixengine.org/LICENSE for licensing information.
|
||||||
|
#
|
||||||
|
# Contact ask@quickfixengine.org if any conditions of this licensing are
|
||||||
|
# not clear to you.
|
||||||
|
#****************************************************************************
|
||||||
|
|
||||||
|
class Reflector < Array
|
||||||
|
|
||||||
|
def identifyMessage(message)
|
||||||
|
if [?I, ?E, ?R, ?i, ?e].include?(message[0])
|
||||||
|
return message[0]
|
||||||
|
else
|
||||||
|
return ?X
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def processFile(messages)
|
||||||
|
lineNum = 0
|
||||||
|
messages.each_line do
|
||||||
|
| line |
|
||||||
|
lineNum += 1
|
||||||
|
line.chomp!
|
||||||
|
if line.empty? then
|
||||||
|
elsif (/^[IEie]\d{1},/ === line) then
|
||||||
|
cid = line[1].to_i - 48
|
||||||
|
body = fixify!(timify!(line[3, line.length]))
|
||||||
|
else
|
||||||
|
cid = 1
|
||||||
|
body = fixify!(timify!(line[1, line.length]))
|
||||||
|
end
|
||||||
|
|
||||||
|
begin
|
||||||
|
processLine(lineNum, line, body, cid)
|
||||||
|
rescue
|
||||||
|
errorAction(lineNum, line);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def processLine(lineNum, line, body, cid)
|
||||||
|
if line.empty?
|
||||||
|
elsif line[0] == ?\#
|
||||||
|
elsif identifyMessage(line) == ?I
|
||||||
|
initiateAction(body, cid)
|
||||||
|
elsif identifyMessage(line) == ?E
|
||||||
|
expectedAction(body, cid)
|
||||||
|
elsif identifyMessage(line) == ?i
|
||||||
|
if body == "CONNECT"
|
||||||
|
connectAction(cid)
|
||||||
|
elsif body == "DISCONNECT"
|
||||||
|
disconnectAction(cid)
|
||||||
|
elsif body.index("SET_SESSION") == 0
|
||||||
|
setSeqnum(body)
|
||||||
|
else
|
||||||
|
raise "Syntax error: " + body
|
||||||
|
end
|
||||||
|
elsif identifyMessage(line) == ?e
|
||||||
|
if body == "CONNECT"
|
||||||
|
waitConnectAction(cid)
|
||||||
|
elsif body == "DISCONNECT"
|
||||||
|
waitDisconnectAction(cid)
|
||||||
|
else
|
||||||
|
raise "Syntax error: " + body
|
||||||
|
end
|
||||||
|
else
|
||||||
|
raise "Syntax error: " + body
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def fixify!(message)
|
||||||
|
hasLength = (message =~ /[\001]9=.*?[\001]/)
|
||||||
|
length = ""
|
||||||
|
|
||||||
|
head = message.slice!(/^8=.*?[\001]/)
|
||||||
|
|
||||||
|
if head == nil
|
||||||
|
return message
|
||||||
|
end
|
||||||
|
|
||||||
|
checksum = message.slice(/[\001]10=.*[\001]$/)
|
||||||
|
if(checksum != nil)
|
||||||
|
message.slice!(/[\001]10=.*[\001]$/)
|
||||||
|
end
|
||||||
|
|
||||||
|
message.chomp!
|
||||||
|
if hasLength == nil
|
||||||
|
length = "9=" + message.length.to_s + "\001"
|
||||||
|
end
|
||||||
|
|
||||||
|
if checksum == nil
|
||||||
|
checksumStr = sprintf("%03d", (head + length + message).sum(8));
|
||||||
|
checksum = "10=" + checksumStr + "\001"
|
||||||
|
end
|
||||||
|
|
||||||
|
message.replace(head + length + message + checksum)
|
||||||
|
return message
|
||||||
|
end
|
||||||
|
|
||||||
|
def timify!(message)
|
||||||
|
copy = ""
|
||||||
|
copy.replace(message)
|
||||||
|
t = getTime
|
||||||
|
|
||||||
|
strtime = t.strftime("%Y%m%d-%H:%M:%S")
|
||||||
|
message.sub!("<TIME>", strtime)
|
||||||
|
if( message != copy )
|
||||||
|
return timify!(message)
|
||||||
|
end
|
||||||
|
|
||||||
|
pos1 = /\<TIME[+-]\d+\>/ =~ message
|
||||||
|
pos2 = /\>/ =~ message
|
||||||
|
if( pos1 != nil )
|
||||||
|
op = message[pos1 + 5]
|
||||||
|
num = message.slice(pos1+6..pos2-1)
|
||||||
|
if( op == ?+ )
|
||||||
|
t += num.to_i
|
||||||
|
else
|
||||||
|
t -= num.to_i
|
||||||
|
end
|
||||||
|
|
||||||
|
strtime = t.strftime("%Y%m%d-%H:%M:%S")
|
||||||
|
exp = Regexp.compile("<TIME[" + op.chr + "]" + num + ">")
|
||||||
|
message.sub!(exp, strtime)
|
||||||
|
if( message != copy )
|
||||||
|
return timify!(message)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return message
|
||||||
|
end
|
||||||
|
|
||||||
|
def getTime
|
||||||
|
t = Time.new
|
||||||
|
t = t.gmtime
|
||||||
|
return t
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
135
quickfix/_test/ReflectorClient.rb
Normal file
135
quickfix/_test/ReflectorClient.rb
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
#****************************************************************************
|
||||||
|
# Copyright (c) quickfixengine.org All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of the QuickFIX FIX Engine
|
||||||
|
#
|
||||||
|
# This file may be distributed under the terms of the quickfixengine.org
|
||||||
|
# license as defined by quickfixengine.org and appearing in the file
|
||||||
|
# LICENSE included in the packaging of this file.
|
||||||
|
#
|
||||||
|
# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||||
|
# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
#
|
||||||
|
# See http://www.quickfixengine.org/LICENSE for licensing information.
|
||||||
|
#
|
||||||
|
# Contact ask@quickfixengine.org if any conditions of this licensing are
|
||||||
|
# not clear to you.
|
||||||
|
#****************************************************************************
|
||||||
|
|
||||||
|
require 'Reflector'
|
||||||
|
require 'FixParser'
|
||||||
|
require "socket"
|
||||||
|
require 'uri'
|
||||||
|
require 'net/http'
|
||||||
|
|
||||||
|
class ReflectorClient
|
||||||
|
|
||||||
|
def initialize(messages, address, port)
|
||||||
|
@reflector = Reflector.new
|
||||||
|
@messages = messages
|
||||||
|
@sockets = Hash.new(nil)
|
||||||
|
@parsers = Hash.new(nil)
|
||||||
|
|
||||||
|
def @reflector.address=(a)
|
||||||
|
@address = a
|
||||||
|
end
|
||||||
|
|
||||||
|
def @reflector.port=(p)
|
||||||
|
@port = p
|
||||||
|
end
|
||||||
|
|
||||||
|
def @reflector.client=(c)
|
||||||
|
@client = c
|
||||||
|
end
|
||||||
|
|
||||||
|
def @reflector.sockets=(s)
|
||||||
|
@sockets = s
|
||||||
|
end
|
||||||
|
|
||||||
|
def @reflector.parsers=(p)
|
||||||
|
@parsers = p
|
||||||
|
end
|
||||||
|
|
||||||
|
def @reflector.connectAction(cid)
|
||||||
|
socket = TCPSocket.open(@address, @port)
|
||||||
|
if socket == nil
|
||||||
|
raise IOError("failed to connect")
|
||||||
|
end
|
||||||
|
@sockets[cid] = socket
|
||||||
|
@parsers[cid] = FixParser.new(socket)
|
||||||
|
end
|
||||||
|
|
||||||
|
def @reflector.disconnectAction(cid)
|
||||||
|
@sockets[cid].close
|
||||||
|
@sockets.delete(cid)
|
||||||
|
@parsers.delete(cid)
|
||||||
|
end
|
||||||
|
|
||||||
|
def @reflector.setSeqnum(body)
|
||||||
|
left_array = body.split(" ")
|
||||||
|
uri = URI('http://localhost:8095/seqnum?SESSION='+left_array[1]+'&'+left_array[2])
|
||||||
|
Net::HTTP.get_response(uri)
|
||||||
|
end
|
||||||
|
|
||||||
|
def @reflector.waitConnectAction(cid)
|
||||||
|
end
|
||||||
|
|
||||||
|
def @reflector.waitDisconnectAction(cid)
|
||||||
|
begin
|
||||||
|
socket = @sockets[cid]
|
||||||
|
if IO.select([socket], nil, nil, 10) == nil then
|
||||||
|
raise "Connection hangs after ten seconds."
|
||||||
|
elsif !socket.eof? then
|
||||||
|
raise "Expected disconnection, got data"
|
||||||
|
end
|
||||||
|
rescue Errno::ECONNRESET
|
||||||
|
# Ignore, server has already disconnected the socket
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def @reflector.initiateAction(msg, cid)
|
||||||
|
if( @sockets[cid] == nil )
|
||||||
|
raise "Unable to send message because connection was dropped"
|
||||||
|
end
|
||||||
|
@sockets[cid].write(msg)
|
||||||
|
@client.initiateAction(msg, cid)
|
||||||
|
end
|
||||||
|
|
||||||
|
def @reflector.expectedAction(msg, cid)
|
||||||
|
m = @parsers[cid].readFixMessage
|
||||||
|
@client.expectedAction(msg, cid)
|
||||||
|
@client.compareAction(msg, m)
|
||||||
|
end
|
||||||
|
|
||||||
|
def @reflector.errorAction(lineNum, line)
|
||||||
|
@client.errorAction(lineNum, line)
|
||||||
|
end
|
||||||
|
|
||||||
|
@reflector.client = self
|
||||||
|
@reflector.address = address
|
||||||
|
@reflector.port = port
|
||||||
|
@reflector.sockets = @sockets
|
||||||
|
@reflector.parsers = @parsers
|
||||||
|
end
|
||||||
|
|
||||||
|
def start()
|
||||||
|
@reflector.processFile(@messages)
|
||||||
|
end
|
||||||
|
|
||||||
|
def stop()
|
||||||
|
@sockets.each do
|
||||||
|
|cid, s|
|
||||||
|
begin
|
||||||
|
s.close
|
||||||
|
rescue
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def initiateAction(msg, cid)
|
||||||
|
end
|
||||||
|
def expectedAction(msg, cid)
|
||||||
|
end
|
||||||
|
def responseAction(msg, cid)
|
||||||
|
end
|
||||||
|
end
|
||||||
55
quickfix/_test/ReflectorClientTestCase.rb
Normal file
55
quickfix/_test/ReflectorClientTestCase.rb
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
require 'ReflectorClient'
|
||||||
|
require 'runit/testcase'
|
||||||
|
require 'ReflectorServer'
|
||||||
|
require "thread"
|
||||||
|
|
||||||
|
class ReflectorClientTestCase < RUNIT::TestCase
|
||||||
|
|
||||||
|
def test_reflectMessages
|
||||||
|
|
||||||
|
serverMessages = "E8=FIX.4.2\0019=13\00135=AC\001108=30\00110=31\001\n"
|
||||||
|
serverMessages += "I8=FIX.4.2\0019=13\00135=AS\001108=10\00110=31\001\n"
|
||||||
|
serverMessages += "E8=FIX.4.2\0019=13\00135=BC\001108=25\00110=31\001\n"
|
||||||
|
serverMessages += "I8=FIX.4.2\0019=13\00135=BS\001108=15\00110=31\001\n"
|
||||||
|
|
||||||
|
clientMessages = "iCONNECT\n"
|
||||||
|
clientMessages += "I8=FIX.4.2\0019=13\00135=AC\001108=30\00110=31\001\n"
|
||||||
|
clientMessages += "E8=FIX.4.2\0019=13\00135=AS\001108=10\00110=31\001\n"
|
||||||
|
clientMessages += "I8=FIX.4.2\0019=13\00135=BC\001108=25\00110=31\001\n"
|
||||||
|
clientMessages += "E8=FIX.4.2\0019=13\00135=BS\001108=15\00110=31\001\n"
|
||||||
|
clientMessages += "iDISCONNECT\n"
|
||||||
|
|
||||||
|
server = ReflectorServer.new(serverMessages)
|
||||||
|
client = ReflectorClient.new(clientMessages, "localhost", RUNIT::TestCase.port)
|
||||||
|
|
||||||
|
def client.next
|
||||||
|
begin
|
||||||
|
return @queue.pop 0
|
||||||
|
rescue
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def client.compareAction(e, a)
|
||||||
|
if !defined? @queue
|
||||||
|
@queue = Queue.new
|
||||||
|
end
|
||||||
|
@queue.push(e)
|
||||||
|
@queue.push(a)
|
||||||
|
end
|
||||||
|
|
||||||
|
Thread.start do
|
||||||
|
server.listen(RUNIT::TestCase.port)
|
||||||
|
end
|
||||||
|
server.wait
|
||||||
|
|
||||||
|
client.start()
|
||||||
|
assert_equals("8=FIX.4.2\0019=13\00135=AS\001108=10\00110=31\001", client.next)
|
||||||
|
assert_equals("8=FIX.4.2\0019=13\00135=AS\001108=10\00110=31\001", client.next)
|
||||||
|
assert_equals("8=FIX.4.2\0019=13\00135=BS\001108=15\00110=31\001", client.next)
|
||||||
|
assert_equals("8=FIX.4.2\0019=13\00135=BS\001108=15\00110=31\001", client.next)
|
||||||
|
assert_equals(nil, client.next)
|
||||||
|
server.stop
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
111
quickfix/_test/ReflectorServer.rb
Normal file
111
quickfix/_test/ReflectorServer.rb
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
#****************************************************************************
|
||||||
|
# Copyright (c) quickfixengine.org All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of the QuickFIX FIX Engine
|
||||||
|
#
|
||||||
|
# This file may be distributed under the terms of the quickfixengine.org
|
||||||
|
# license as defined by quickfixengine.org and appearing in the file
|
||||||
|
# LICENSE included in the packaging of this file.
|
||||||
|
#
|
||||||
|
# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||||
|
# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
#
|
||||||
|
# See http://www.quickfixengine.org/LICENSE for licensing information.
|
||||||
|
#
|
||||||
|
# Contact ask@quickfixengine.org if any conditions of this licensing are
|
||||||
|
# not clear to you.
|
||||||
|
#****************************************************************************
|
||||||
|
|
||||||
|
require 'SocketServer'
|
||||||
|
require 'Reflector'
|
||||||
|
|
||||||
|
class ReflectorServer < SocketServer
|
||||||
|
|
||||||
|
def initialize(messages, address = "localhost", port = 5000)
|
||||||
|
@reflector = Reflector.new
|
||||||
|
@parser = nil
|
||||||
|
@socket = nil
|
||||||
|
@messages = messages
|
||||||
|
@port = port
|
||||||
|
|
||||||
|
def @reflector.socket=(s)
|
||||||
|
@socket = s
|
||||||
|
end
|
||||||
|
|
||||||
|
def @reflector.socket
|
||||||
|
return @socket
|
||||||
|
end
|
||||||
|
|
||||||
|
def @reflector.server=(s)
|
||||||
|
@server = s
|
||||||
|
end
|
||||||
|
|
||||||
|
def @reflector.parser=(s)
|
||||||
|
@parser = s
|
||||||
|
end
|
||||||
|
|
||||||
|
def @reflector.expectedAction(msg, cid)
|
||||||
|
m = @parser.readFixMessage
|
||||||
|
@server.compareAction(msg, m)
|
||||||
|
end
|
||||||
|
|
||||||
|
def @reflector.initiateAction(msg, cid)
|
||||||
|
@socket.write(msg)
|
||||||
|
end
|
||||||
|
|
||||||
|
def @reflector.waitConnectAction(cid)
|
||||||
|
@server.waitConnectAction
|
||||||
|
end
|
||||||
|
|
||||||
|
def @reflector.waitDisconnectAction(cid)
|
||||||
|
begin
|
||||||
|
if IO.select([@socket], nil, nil, 10) == nil then
|
||||||
|
raise "Connection hangs after five seconds."
|
||||||
|
elsif !@socket.eof? then
|
||||||
|
raise "Expected disconnection, got data"
|
||||||
|
end
|
||||||
|
rescue Errno::ECONNRESET
|
||||||
|
# Ignore, client has already disconnected the socket
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
def connectAction(s)
|
||||||
|
if @socket == nil
|
||||||
|
@socket = s
|
||||||
|
@reflector.socket = s
|
||||||
|
@reflector.server = self
|
||||||
|
else
|
||||||
|
s.close
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def waitConnectAction
|
||||||
|
gs = TCPServer.open(@port)
|
||||||
|
addr = gs.addr
|
||||||
|
addr.shift
|
||||||
|
if IO.select([gs], nil, nil, 10) == nil then
|
||||||
|
raise "Connection hangs after ten seconds."
|
||||||
|
end
|
||||||
|
@socket = gs.accept
|
||||||
|
@parser = FixParser.new(@socket)
|
||||||
|
@reflector.parser = @parser
|
||||||
|
@reflector.socket = @socket
|
||||||
|
end
|
||||||
|
|
||||||
|
def disconnectAction(s)
|
||||||
|
end
|
||||||
|
|
||||||
|
def receiveAction(s)
|
||||||
|
end
|
||||||
|
|
||||||
|
def compareAction(e, a)
|
||||||
|
end
|
||||||
|
|
||||||
|
def start
|
||||||
|
@reflector.server = self
|
||||||
|
@reflector.processFile(@messages)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
33
quickfix/_test/ReflectorServerTestCase.rb
Normal file
33
quickfix/_test/ReflectorServerTestCase.rb
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
require 'ReflectorServer'
|
||||||
|
require 'runit/testcase'
|
||||||
|
require "thread"
|
||||||
|
|
||||||
|
class ReflectorServerTestCase < RUNIT::TestCase
|
||||||
|
|
||||||
|
def test_reflectMessages
|
||||||
|
messages = "E8=FIX.4.2\0019=12\00135=A\001108=30\00110=31\001\n"
|
||||||
|
messages += "R8=FIX.4.2\0019=12\00135=A\001108=10\00110=31\001\n"
|
||||||
|
messages += "E8=FIX.4.2\0019=12\00135=A\001108=25\00110=31\001\n"
|
||||||
|
messages += "R8=FIX.4.2\0019=12\00135=A\001108=15\00110=31\001\n"
|
||||||
|
|
||||||
|
server = ReflectorServer.new(messages)
|
||||||
|
Thread.start do
|
||||||
|
server.listen(RUNIT::TestCase.port)
|
||||||
|
end
|
||||||
|
server.wait
|
||||||
|
|
||||||
|
s = TCPSocket.open("localhost", RUNIT::TestCase.port)
|
||||||
|
parser = FixParser.new(s)
|
||||||
|
|
||||||
|
begin
|
||||||
|
s.write("8=FIX.4.2\0019=12\00135=A\001108=30\00110=31\001")
|
||||||
|
assert_equals("8=FIX.4.2\0019=12\00135=A\001108=10\00110=31\001", parser.readFixMessage)
|
||||||
|
s.write("8=FIX.4.2\0019=12\00135=A\001108=30\00125=31\001")
|
||||||
|
assert_equals("8=FIX.4.2\0019=12\00135=A\001108=15\00110=31\001", parser.readFixMessage)
|
||||||
|
rescue IOError
|
||||||
|
end
|
||||||
|
|
||||||
|
s.close
|
||||||
|
server.stop
|
||||||
|
end
|
||||||
|
end
|
||||||
208
quickfix/_test/ReflectorTestCase.rb
Normal file
208
quickfix/_test/ReflectorTestCase.rb
Normal file
@ -0,0 +1,208 @@
|
|||||||
|
require 'Reflector'
|
||||||
|
|
||||||
|
class MockReflector < Reflector
|
||||||
|
def getTime
|
||||||
|
t = Time.gm(2000, "jan", 1, 20, 15, 1)
|
||||||
|
return t
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
require 'runit/testcase'
|
||||||
|
|
||||||
|
class ReflectorTestCase < RUNIT::TestCase
|
||||||
|
|
||||||
|
def test_identifyMessage
|
||||||
|
reflector = Reflector.new
|
||||||
|
message = "I8=FIX42"
|
||||||
|
assert(reflector.identifyMessage(message) == ?I)
|
||||||
|
message = "E8=FIX42"
|
||||||
|
assert(reflector.identifyMessage(message) == ?E)
|
||||||
|
message = "R8=FIX42"
|
||||||
|
assert(reflector.identifyMessage(message) == ?R)
|
||||||
|
message = "8=FIX42"
|
||||||
|
assert(reflector.identifyMessage(message) == ?X)
|
||||||
|
message = "iACTION"
|
||||||
|
assert(reflector.identifyMessage(message) == ?i)
|
||||||
|
message = "eACTION"
|
||||||
|
assert(reflector.identifyMessage(message) == ?e)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_timify_and_fixify
|
||||||
|
reflector = MockReflector.new
|
||||||
|
|
||||||
|
str = reflector.fixify!(reflector.timify!("8=FIX.4.235=D34=249=PATS52=<TIME>56=RCG1=acct111=121=138=240=154=155=ESU260=<TIME>167=FUT204=1207=CME9701=omni19702=19706=E9707=1239708=G"))
|
||||||
|
assert_equals("8=FIX.4.29=17135=D34=249=PATS52=20000101-20:15:0156=RCG1=acct111=121=138=240=154=155=ESU260=20000101-20:15:01167=FUT204=1207=CME9701=omni19702=19706=E9707=1239708=G10=121", str)
|
||||||
|
|
||||||
|
str = reflector.fixify!(reflector.timify!("8=FIX.4.235=D34=249=PATS52=<TIME>56=RCG1=acct111=121=138=240=154=155=ESU260=<TIME>167=FUT204=1207=CME9701=omni19702=19706=E9707=1239708=G9709=PEA"))
|
||||||
|
assert_equals("8=FIX.4.29=18035=D34=249=PATS52=20000101-20:15:0156=RCG1=acct111=121=138=240=154=155=ESU260=20000101-20:15:01167=FUT204=1207=CME9701=omni19702=19706=E9707=1239708=G9709=PEA10=102", str)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_fixify_bang
|
||||||
|
reflector = Reflector.new
|
||||||
|
|
||||||
|
str = "8=FIX.4.235=A34=149=TW52=20000426-12:05:06" +
|
||||||
|
"56=ISLD98=0108=30"
|
||||||
|
reflector.fixify!(str)
|
||||||
|
assert_equals("8=FIX.4.29=5735=A34=149=TW52=20000426-12:05:0656=ISLD98=0108=3010=005", str)
|
||||||
|
|
||||||
|
str = "8=FIX.4.29=5735=A34=149=TW52=20000426-12:05:06" +
|
||||||
|
"56=ISLD98=0108=3010=005"
|
||||||
|
reflector.fixify!(str)
|
||||||
|
assert_equals("8=FIX.4.29=5735=A34=149=TW52=20000426-12:05:0656=ISLD98=0108=3010=005", str)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_timify_bang
|
||||||
|
reflector = Reflector.new
|
||||||
|
|
||||||
|
str = "8=FIX.4.29=5735=A34=149=TW52=20011010-10:10:1056=ISLD98=0108=3010=005"
|
||||||
|
reflector.timify!(str)
|
||||||
|
assert_equals("8=FIX.4.29=5735=A34=149=TW52=20011010-10:10:1056=ISLD98=0108=3010=005", str)
|
||||||
|
|
||||||
|
str = "8=FIX.4.29=5735=A34=149=TW52=<TIME>56=ISLD98=0" +
|
||||||
|
"108=3010=005"
|
||||||
|
reflector.timify!(str)
|
||||||
|
match = (/8=FIX.4.29=5735=A34=149=TW52=\d{8}-\d{2}:\d{2}:\d{2}56=ISLD98=0108=3010=005/ === str)
|
||||||
|
assert(match != nil)
|
||||||
|
|
||||||
|
str = "8=FIX.4.29=5735=A34=149=TW52=<TIME>56=ISLD" +
|
||||||
|
"122=<TIME>98=0108=3010=005"
|
||||||
|
reflector.timify!(str)
|
||||||
|
match = (/8=FIX.4.29=5735=A34=149=TW52=\d{8}-\d{2}:\d{2}:\d{2}56=ISLD122=\d{8}-\d{2}:\d{2}:\d{2}98=0108=3010=005/ === str)
|
||||||
|
assert(match != nil)
|
||||||
|
|
||||||
|
str = "8=FIX.4.29=5735=A34=149=TW52=<TIME+9>56=ISLD98=0" +
|
||||||
|
"108=3010=005"
|
||||||
|
reflector.timify!(str)
|
||||||
|
match = (/8=FIX.4.29=5735=A34=149=TW52=\d{8}-\d{2}:\d{2}:\d{2}56=ISLD98=0108=3010=005/ === str)
|
||||||
|
assert(match != nil)
|
||||||
|
|
||||||
|
str = "8=FIX.4.29=5735=A34=149=TW52=<TIME>56=ISLD98=0" +
|
||||||
|
"108=3060=<TIME>10=005"
|
||||||
|
reflector.timify!(str)
|
||||||
|
match = (/8=FIX.4.29=5735=A34=149=TW52=\d{8}-\d{2}:\d{2}:\d{2}56=ISLD98=0108=3060=\d{8}-\d{2}:\d{2}:\d{2}10=005/ === str)
|
||||||
|
assert(match != nil)
|
||||||
|
|
||||||
|
str = "8=FIX.4.235=D34=249=PATS52=<TIME>56=RCG1=acct111=121=138=240=154=155=ESU2" +
|
||||||
|
"60=<TIME>167=FUT204=1207=CME9701=omni19702=19706=E9707=1239708=G9710=PEA"
|
||||||
|
reflector.timify!(str)
|
||||||
|
match = (/8=FIX.4.235=D34=249=PATS52=\d{8}-\d{2}:\d{2}:\d{2}56=RCG1=acct111=121=138=240=154=155=ESU260=\d{8}-\d{2}:\d{2}:\d{2}167=FUT204=1207=CME9701=omni19702=19706=E9707=1239708=G9710=PEA/ === str)
|
||||||
|
assert(match != nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_identifyFile
|
||||||
|
reflector = Reflector.new
|
||||||
|
messages = "E8=1\nI8=2\n\nI8=3\nE8=4\n#foo\nE8=5\nE8=6\nI8=7\niCONNECT\neDISCONNECT\neCONNECT\niDISCONNECT\nE2,8=8\n"
|
||||||
|
cum = ""
|
||||||
|
|
||||||
|
def reflector.ini=(i)
|
||||||
|
@ini = i
|
||||||
|
end
|
||||||
|
def reflector.ini
|
||||||
|
return @ini
|
||||||
|
end
|
||||||
|
|
||||||
|
def reflector.cum=(c)
|
||||||
|
@cum = c
|
||||||
|
end
|
||||||
|
def reflector.cum
|
||||||
|
return @cum
|
||||||
|
end
|
||||||
|
|
||||||
|
def reflector.exp=(e)
|
||||||
|
@exp = e
|
||||||
|
end
|
||||||
|
def reflector.exp
|
||||||
|
return @exp
|
||||||
|
end
|
||||||
|
|
||||||
|
def reflector.icon=(i)
|
||||||
|
@icon = i
|
||||||
|
end
|
||||||
|
def reflector.icon
|
||||||
|
return @icon
|
||||||
|
end
|
||||||
|
|
||||||
|
def reflector.idis=(i)
|
||||||
|
@idis = i
|
||||||
|
end
|
||||||
|
def reflector.idis
|
||||||
|
return @idis
|
||||||
|
end
|
||||||
|
|
||||||
|
def reflector.econ=(e)
|
||||||
|
@econ = e
|
||||||
|
end
|
||||||
|
def reflector.econ
|
||||||
|
return @econ
|
||||||
|
end
|
||||||
|
|
||||||
|
def reflector.edis=(e)
|
||||||
|
@edis = e
|
||||||
|
end
|
||||||
|
def reflector.edis
|
||||||
|
return @edis
|
||||||
|
end
|
||||||
|
|
||||||
|
def reflector.err=(e)
|
||||||
|
@err = e
|
||||||
|
end
|
||||||
|
def reflector.err
|
||||||
|
return @err
|
||||||
|
end
|
||||||
|
|
||||||
|
reflector.ini = ""; reflector.cum = "";
|
||||||
|
reflector.exp = ""; reflector.icon = "";
|
||||||
|
reflector.idis = ""; reflector.econ = "";
|
||||||
|
reflector.edis = ""; reflector.err = "";
|
||||||
|
|
||||||
|
def reflector.initiateAction(msg, cid)
|
||||||
|
@cum += cid.to_s + "," + msg + "|"
|
||||||
|
@ini += cid.to_s + "," + msg + "|"
|
||||||
|
end
|
||||||
|
|
||||||
|
def reflector.expectedAction(msg, cid)
|
||||||
|
@cum += cid.to_s + "," + msg + "|"
|
||||||
|
@exp += cid.to_s + "," + msg + "|"
|
||||||
|
end
|
||||||
|
|
||||||
|
def reflector.connectAction(cid)
|
||||||
|
@cum += cid.to_s + "," + "iCONNECT" + "|"
|
||||||
|
@icon += cid.to_s + "," + "iCONNECT" + "|"
|
||||||
|
end
|
||||||
|
|
||||||
|
def reflector.disconnectAction(cid)
|
||||||
|
@cum += cid.to_s + "," + "iDISCONNECT" + "|"
|
||||||
|
@idis += cid.to_s + "," + "iDISCONNECT" + "|"
|
||||||
|
end
|
||||||
|
|
||||||
|
def reflector.waitConnectAction(cid)
|
||||||
|
@cum += cid.to_s + "," + "eCONNECT" + "|"
|
||||||
|
@econ += cid.to_s + "," + "eCONNECT" + "|"
|
||||||
|
end
|
||||||
|
|
||||||
|
def reflector.waitDisconnectAction(cid)
|
||||||
|
@cum += cid.to_s + "," + "eDISCONNECT" + "|"
|
||||||
|
@edis += cid.to_s + "," + "eDISCONNECT" + "|"
|
||||||
|
end
|
||||||
|
|
||||||
|
def reflector.errorAction(lineNum, msg)
|
||||||
|
@cum += msg + "|"
|
||||||
|
@err += msg + "|"
|
||||||
|
end
|
||||||
|
|
||||||
|
reflector.processFile(messages)
|
||||||
|
|
||||||
|
#messages = "E8=1\nI8=2\n\nI8=3\nE8=4\n#foo\nE8=5\nE8=6\nI8=7\niCONNECT\neDISCONNECT\neCONNECT\niDISCONNECT\nE2,8=8\n"
|
||||||
|
|
||||||
|
assert_equals("1,8=1|1,8=2|1,8=3|1,8=4|1,8=5|1,8=6|1,8=7|" +
|
||||||
|
"1,iCONNECT|1,eDISCONNECT|1,eCONNECT|1,iDISCONNECT|2,8=8|",
|
||||||
|
reflector.cum)
|
||||||
|
assert_equals("1,8=2|1,8=3|1,8=7|", reflector.ini)
|
||||||
|
assert_equals("1,8=1|1,8=4|1,8=5|1,8=6|2,8=8|", reflector.exp)
|
||||||
|
assert_equals("1,iCONNECT|", reflector.icon)
|
||||||
|
assert_equals("1,iDISCONNECT|", reflector.idis)
|
||||||
|
assert_equals("1,eCONNECT|", reflector.econ)
|
||||||
|
assert_equals("1,eDISCONNECT|", reflector.edis)
|
||||||
|
end
|
||||||
|
end
|
||||||
144
quickfix/_test/Runner.rb
Normal file
144
quickfix/_test/Runner.rb
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
#****************************************************************************
|
||||||
|
# Copyright (c) quickfixengine.org All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of the QuickFIX FIX Engine
|
||||||
|
#
|
||||||
|
# This file may be distributed under the terms of the quickfixengine.org
|
||||||
|
# license as defined by quickfixengine.org and appearing in the file
|
||||||
|
# LICENSE included in the packaging of this file.
|
||||||
|
#
|
||||||
|
# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||||
|
# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
#
|
||||||
|
# See http://www.quickfixengine.org/LICENSE for licensing information.
|
||||||
|
#
|
||||||
|
# Contact ask@quickfixengine.org if any conditions of this licensing are
|
||||||
|
# not clear to you.
|
||||||
|
#****************************************************************************
|
||||||
|
|
||||||
|
require 'ReflectorClient'
|
||||||
|
require 'Comparator'
|
||||||
|
|
||||||
|
def extendProcess(c)
|
||||||
|
|
||||||
|
def c.errorAction(lineNum, line)
|
||||||
|
report = " " + $!.to_s + "\n"
|
||||||
|
report += " <line>" + lineNum.to_s + "</line>\n"
|
||||||
|
raise report
|
||||||
|
end
|
||||||
|
|
||||||
|
def c.compareAction(e, a)
|
||||||
|
if( !defined? @patterns )
|
||||||
|
@patterns = "10=\\d{1,3}\n52=\\d{8}-\\d{2}:\\d{2}:\\d{2}\n";
|
||||||
|
end
|
||||||
|
if( !defined? @comp )
|
||||||
|
@comp = Comparator.new(@patterns)
|
||||||
|
end
|
||||||
|
|
||||||
|
if( !@comp.compare(e,a) )
|
||||||
|
e.tr!("\001", "*")
|
||||||
|
a.tr!("\001", "*")
|
||||||
|
report = @comp.reason + "\n"
|
||||||
|
report += " <expected><![CDATA[" + e + "]]></expected>\n"
|
||||||
|
report += " <received><![CDATA[" + a + "]]></received>"
|
||||||
|
raise report
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def c.patterns=(p)
|
||||||
|
@patterns = p
|
||||||
|
end
|
||||||
|
|
||||||
|
c.patterns = File.open("definitions/fields.fmt", "r")
|
||||||
|
end
|
||||||
|
|
||||||
|
def printResult(test, exception)
|
||||||
|
print "<test name='", test, "' result='"
|
||||||
|
if exception == nil then
|
||||||
|
print "success'/>\n"
|
||||||
|
else
|
||||||
|
print "failure' >\n"
|
||||||
|
print " <message>\n", $!, " </message>\n"
|
||||||
|
#print " <trace><![CDATA["
|
||||||
|
#print $!.backtrace.join("]]></trace>\n <trace><![CDATA[")
|
||||||
|
#print " ]]></trace>\n"
|
||||||
|
print "</test>\n"
|
||||||
|
end
|
||||||
|
STDOUT.flush
|
||||||
|
end
|
||||||
|
|
||||||
|
def createProcess(file, address, port)
|
||||||
|
newarray = [1,2,3,4,5,6,7,8,9,10]
|
||||||
|
newarray.each do
|
||||||
|
| num |
|
||||||
|
begin
|
||||||
|
socket = TCPSocket.open(address, port);
|
||||||
|
rescue
|
||||||
|
end
|
||||||
|
if socket == nil
|
||||||
|
sleep 3
|
||||||
|
next
|
||||||
|
else
|
||||||
|
socket.close
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
file.each_line do
|
||||||
|
| line |
|
||||||
|
if line =~ /^i\d*,?CONNECT/ then
|
||||||
|
return ReflectorClient.new(file, address, port)
|
||||||
|
elsif line =~ /^e\d*,?CONNECT/ then
|
||||||
|
return ReflectorServer.new(file)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
i = 0
|
||||||
|
newarray = ARGV[2, ARGV.length-2]
|
||||||
|
exitValue = 0
|
||||||
|
total = 0
|
||||||
|
failures = 0
|
||||||
|
|
||||||
|
begin
|
||||||
|
print "<at>\n"
|
||||||
|
newarray.each do
|
||||||
|
| v |
|
||||||
|
file = File.open(v, "r")
|
||||||
|
process = createProcess(file, ARGV[0], ARGV[1])
|
||||||
|
if process.nil? then
|
||||||
|
print " <test name='", v, "' result='", "failure' >\n"
|
||||||
|
print " <message><![CDATA[Test definition did "
|
||||||
|
print "not contain iCONNECT or eCONNECT]]></message>\n"
|
||||||
|
print " </test>\n"
|
||||||
|
exitValue += 1
|
||||||
|
next
|
||||||
|
end
|
||||||
|
file.rewind
|
||||||
|
extendProcess(process)
|
||||||
|
|
||||||
|
sleep(0.1)
|
||||||
|
total += 1
|
||||||
|
begin
|
||||||
|
process.start
|
||||||
|
printResult(v, nil)
|
||||||
|
process.stop
|
||||||
|
rescue
|
||||||
|
failures += 1
|
||||||
|
exitValue += 1
|
||||||
|
printResult(v, $!)
|
||||||
|
process.stop
|
||||||
|
end
|
||||||
|
end
|
||||||
|
print "\n<results total='", total, "' failures='", failures, "'/>\n"
|
||||||
|
print "</at>\n"
|
||||||
|
rescue
|
||||||
|
print " ",$!,"\n"
|
||||||
|
print "</at>\n"
|
||||||
|
end
|
||||||
|
|
||||||
|
exit exitValue
|
||||||
|
|
||||||
|
if not Object.respond_to?("is_testing") or not Object.is_testing then
|
||||||
|
end
|
||||||
21
quickfix/_test/RunnerTestCase.rb
Normal file
21
quickfix/_test/RunnerTestCase.rb
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
require 'Runner'
|
||||||
|
require 'runit/testcase'
|
||||||
|
|
||||||
|
class RunnerTestCase < RUNIT::TestCase
|
||||||
|
def test_createProcess
|
||||||
|
process = createProcess("foo\nbar\niCONNECT\nbaz", "localhost", 39333)
|
||||||
|
assert process.kind_of?(ReflectorClient)
|
||||||
|
process = createProcess("iCONNECT\nfoo\nbar\nbaz", "localhost", 39333)
|
||||||
|
assert process.kind_of?(ReflectorClient)
|
||||||
|
process = createProcess("foo\nbar\neCONNECT\nbaz", "localhost", 39333)
|
||||||
|
assert process.kind_of?(ReflectorServer)
|
||||||
|
process = createProcess("eCONNECT\nfoo\nbar\nbaz", "localhost", 39333)
|
||||||
|
assert process.kind_of?(ReflectorServer)
|
||||||
|
process = createProcess("foo\nbar\nbaz", "localhost", 39333)
|
||||||
|
assert process.nil?
|
||||||
|
process = createProcess("foo\nbar\nbazeCONNECT", "localhost", 39333)
|
||||||
|
assert process.nil?
|
||||||
|
process = createProcess("", "localhost", 39333)
|
||||||
|
assert process.nil?
|
||||||
|
end
|
||||||
|
end
|
||||||
57
quickfix/_test/SocketServer.rb
Normal file
57
quickfix/_test/SocketServer.rb
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
#****************************************************************************
|
||||||
|
# Copyright (c) quickfixengine.org All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of the QuickFIX FIX Engine
|
||||||
|
#
|
||||||
|
# This file may be distributed under the terms of the quickfixengine.org
|
||||||
|
# license as defined by quickfixengine.org and appearing in the file
|
||||||
|
# LICENSE included in the packaging of this file.
|
||||||
|
#
|
||||||
|
# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||||
|
# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
#
|
||||||
|
# See http://www.quickfixengine.org/LICENSE for licensing information.
|
||||||
|
#
|
||||||
|
# Contact ask@quickfixengine.org if any conditions of this licensing are
|
||||||
|
# not clear to you.
|
||||||
|
#****************************************************************************
|
||||||
|
|
||||||
|
require "socket"
|
||||||
|
|
||||||
|
class SocketServer
|
||||||
|
|
||||||
|
def listen(port)
|
||||||
|
|
||||||
|
@gs = TCPServer.open(port)
|
||||||
|
addr = @gs.addr
|
||||||
|
addr.shift
|
||||||
|
|
||||||
|
while !@gs.closed?
|
||||||
|
ns = @gs.accept
|
||||||
|
Thread.start do
|
||||||
|
s = ns
|
||||||
|
connectAction(s)
|
||||||
|
receiveAction(s)
|
||||||
|
s.close
|
||||||
|
disconnectAction(s)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
def stop
|
||||||
|
if not @gs.nil?
|
||||||
|
@gs.close
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def closed?
|
||||||
|
return @gs.closed?
|
||||||
|
end
|
||||||
|
|
||||||
|
def wait
|
||||||
|
while( closed? )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
68
quickfix/_test/SocketServerTestCase.rb
Normal file
68
quickfix/_test/SocketServerTestCase.rb
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
require 'SocketServer'
|
||||||
|
require 'runit/testcase'
|
||||||
|
require "thread"
|
||||||
|
|
||||||
|
class SocketServerTestCase < RUNIT::TestCase
|
||||||
|
|
||||||
|
def test_listen
|
||||||
|
socketServer = SocketServer.new
|
||||||
|
connectQueue = Queue.new
|
||||||
|
receiveQueue = Queue.new
|
||||||
|
disconnectQueue = Queue.new
|
||||||
|
|
||||||
|
def socketServer.connectQueue=(q)
|
||||||
|
@connectQueue = q
|
||||||
|
end
|
||||||
|
def socketServer.connectQueue
|
||||||
|
return @connectQueue
|
||||||
|
end
|
||||||
|
|
||||||
|
def socketServer.receiveQueue=(q)
|
||||||
|
@receiveQueue = q
|
||||||
|
end
|
||||||
|
def socketServer.receiveQueue
|
||||||
|
return @receiveQueue
|
||||||
|
end
|
||||||
|
|
||||||
|
def socketServer.disconnectQueue=(q)
|
||||||
|
@disconnectQueue = q
|
||||||
|
end
|
||||||
|
def socketServer.disconnectQueue
|
||||||
|
return @disconnectQueue
|
||||||
|
end
|
||||||
|
|
||||||
|
def socketServer.connectAction(s)
|
||||||
|
@connectQueue.push(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
def socketServer.disconnectAction(s)
|
||||||
|
@disconnectQueue.push(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
def socketServer.receiveAction(s)
|
||||||
|
while( str = s.gets )
|
||||||
|
@receiveQueue.push(str)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
socketServer.connectQueue = connectQueue
|
||||||
|
socketServer.receiveQueue = receiveQueue
|
||||||
|
socketServer.disconnectQueue = disconnectQueue
|
||||||
|
|
||||||
|
Thread.start do
|
||||||
|
socketServer.listen(RUNIT::TestCase.port)
|
||||||
|
end
|
||||||
|
socketServer.wait
|
||||||
|
|
||||||
|
s = TCPSocket.open("localhost", RUNIT::TestCase.port)
|
||||||
|
assert(connectQueue.pop)
|
||||||
|
s.write("test\r\n")
|
||||||
|
s.write("test2\r\n")
|
||||||
|
assert_equals("test\r\n", receiveQueue.pop)
|
||||||
|
assert_equals("test2\r\n", receiveQueue.pop)
|
||||||
|
s.close
|
||||||
|
assert(disconnectQueue.pop)
|
||||||
|
socketServer.stop()
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
10
quickfix/_test/atfixturerun.rb
Normal file
10
quickfix/_test/atfixturerun.rb
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
$kidpid = fork;
|
||||||
|
|
||||||
|
if($kidpid == 0) {
|
||||||
|
chdir("..");
|
||||||
|
exec("debug/quickfix -t server -f cfg/at_server_test.cfg");
|
||||||
|
}
|
||||||
|
sleep(6000);
|
||||||
|
`bash -c "./runall"`;
|
||||||
|
|
||||||
|
kill($kidpid);
|
||||||
11
quickfix/_test/cfg/lastseqnumprocessed/fix42.cfg
Normal file
11
quickfix/_test/cfg/lastseqnumprocessed/fix42.cfg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5003
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIX.4.2
|
||||||
|
DataDictionary=../spec/FIX42.xml
|
||||||
|
EnableLastMsgSeqNumProcessed=Y
|
||||||
11
quickfix/_test/cfg/lastseqnumprocessed/fix43.cfg
Normal file
11
quickfix/_test/cfg/lastseqnumprocessed/fix43.cfg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5004
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIX.4.3
|
||||||
|
DataDictionary=../spec/FIX43.xml
|
||||||
|
EnableLastMsgSeqNumProcessed=Y
|
||||||
11
quickfix/_test/cfg/lastseqnumprocessed/fix44.cfg
Normal file
11
quickfix/_test/cfg/lastseqnumprocessed/fix44.cfg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5005
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIX.4.4
|
||||||
|
DataDictionary=../spec/FIX44.xml
|
||||||
|
EnableLastMsgSeqNumProcessed=Y
|
||||||
14
quickfix/_test/cfg/lastseqnumprocessed/fix50.cfg
Normal file
14
quickfix/_test/cfg/lastseqnumprocessed/fix50.cfg
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5006
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIXT.1.1
|
||||||
|
SessionQualifier=FIX50
|
||||||
|
DefaultApplVerID=FIX.5.0
|
||||||
|
TransportDataDictionary=../spec/FIXT11.xml
|
||||||
|
AppDataDictionary=../spec/FIX50.xml
|
||||||
|
EnableLastMsgSeqNumProcessed=Y
|
||||||
14
quickfix/_test/cfg/lastseqnumprocessed/fix50sp1.cfg
Normal file
14
quickfix/_test/cfg/lastseqnumprocessed/fix50sp1.cfg
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5007
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIXT.1.1
|
||||||
|
SessionQualifier=FIX50SP1
|
||||||
|
DefaultApplVerID=FIX.5.0SP1
|
||||||
|
TransportDataDictionary=../spec/FIXT11.xml
|
||||||
|
AppDataDictionary=../spec/FIX50SP1.xml
|
||||||
|
EnableLastMsgSeqNumProcessed=Y
|
||||||
14
quickfix/_test/cfg/lastseqnumprocessed/fix50sp2.cfg
Normal file
14
quickfix/_test/cfg/lastseqnumprocessed/fix50sp2.cfg
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5008
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIXT.1.1
|
||||||
|
SessionQualifier=FIX50SP2
|
||||||
|
DefaultApplVerID=FIX.5.0SP2
|
||||||
|
TransportDataDictionary=../spec/FIXT11.xml
|
||||||
|
AppDataDictionary=../spec/FIX50SP2.xml
|
||||||
|
EnableLastMsgSeqNumProcessed=Y
|
||||||
10
quickfix/_test/cfg/nextexpectedseqnum/fix44.cfg
Normal file
10
quickfix/_test/cfg/nextexpectedseqnum/fix44.cfg
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5005
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIX.4.4
|
||||||
|
DataDictionary=../spec/FIX44.xml
|
||||||
|
EnableNextExpectedMsgSeqNum=Y
|
||||||
12
quickfix/_test/cfg/nextexpectedseqnum/fix50.cfg
Normal file
12
quickfix/_test/cfg/nextexpectedseqnum/fix50.cfg
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5006
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIXT.1.1
|
||||||
|
DefaultApplVerID=FIX.5.0
|
||||||
|
TransportDataDictionary=../spec/FIXT11.xml
|
||||||
|
AppDataDictionary=../spec/FIX50.xml
|
||||||
|
EnableNextExpectedMsgSeqNum=Y
|
||||||
12
quickfix/_test/cfg/nextexpectedseqnum/fix50sp1.cfg
Normal file
12
quickfix/_test/cfg/nextexpectedseqnum/fix50sp1.cfg
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5007
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIXT.1.1
|
||||||
|
DefaultApplVerID=FIX.5.0SP1
|
||||||
|
TransportDataDictionary=../spec/FIXT11.xml
|
||||||
|
AppDataDictionary=../spec/FIX50SP1.xml
|
||||||
|
EnableNextExpectedMsgSeqNum=Y
|
||||||
12
quickfix/_test/cfg/nextexpectedseqnum/fix50sp2.cfg
Normal file
12
quickfix/_test/cfg/nextexpectedseqnum/fix50sp2.cfg
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5008
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIXT.1.1
|
||||||
|
DefaultApplVerID=FIX.5.0SP2
|
||||||
|
TransportDataDictionary=../spec/FIXT11.xml
|
||||||
|
AppDataDictionary=../spec/FIX50SP2.xml
|
||||||
|
EnableNextExpectedMsgSeqNum=Y
|
||||||
11
quickfix/_test/cfg/resendreqchunksize/fix40.cfg
Normal file
11
quickfix/_test/cfg/resendreqchunksize/fix40.cfg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5001
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIX.4.0
|
||||||
|
DataDictionary=../spec/FIX40.xml
|
||||||
|
ResendRequestChunkSize=5
|
||||||
11
quickfix/_test/cfg/resendreqchunksize/fix41.cfg
Normal file
11
quickfix/_test/cfg/resendreqchunksize/fix41.cfg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5002
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIX.4.1
|
||||||
|
DataDictionary=../spec/FIX41.xml
|
||||||
|
ResendRequestChunkSize=5
|
||||||
11
quickfix/_test/cfg/resendreqchunksize/fix42.cfg
Normal file
11
quickfix/_test/cfg/resendreqchunksize/fix42.cfg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5003
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIX.4.2
|
||||||
|
DataDictionary=../spec/FIX42.xml
|
||||||
|
ResendRequestChunkSize=5
|
||||||
11
quickfix/_test/cfg/resendreqchunksize/fix43.cfg
Normal file
11
quickfix/_test/cfg/resendreqchunksize/fix43.cfg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5004
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIX.4.3
|
||||||
|
DataDictionary=../spec/FIX43.xml
|
||||||
|
ResendRequestChunkSize=5
|
||||||
11
quickfix/_test/cfg/resendreqchunksize/fix44.cfg
Normal file
11
quickfix/_test/cfg/resendreqchunksize/fix44.cfg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5005
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIX.4.4
|
||||||
|
DataDictionary=../spec/FIX44.xml
|
||||||
|
ResendRequestChunkSize=5
|
||||||
14
quickfix/_test/cfg/resendreqchunksize/fix50.cfg
Normal file
14
quickfix/_test/cfg/resendreqchunksize/fix50.cfg
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5006
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIXT.1.1
|
||||||
|
SessionQualifier=FIX50
|
||||||
|
DefaultApplVerID=FIX.5.0
|
||||||
|
TransportDataDictionary=../spec/FIXT11.xml
|
||||||
|
AppDataDictionary=../spec/FIX50.xml
|
||||||
|
ResendRequestChunkSize=5
|
||||||
14
quickfix/_test/cfg/resendreqchunksize/fix50sp1.cfg
Normal file
14
quickfix/_test/cfg/resendreqchunksize/fix50sp1.cfg
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5007
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIXT.1.1
|
||||||
|
SessionQualifier=FIX50SP1
|
||||||
|
DefaultApplVerID=FIX.5.0SP1
|
||||||
|
TransportDataDictionary=../spec/FIXT11.xml
|
||||||
|
AppDataDictionary=../spec/FIX50SP1.xml
|
||||||
|
ResendRequestChunkSize=5
|
||||||
14
quickfix/_test/cfg/resendreqchunksize/fix50sp2.cfg
Normal file
14
quickfix/_test/cfg/resendreqchunksize/fix50sp2.cfg
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5008
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIXT.1.1
|
||||||
|
SessionQualifier=FIX50SP2
|
||||||
|
DefaultApplVerID=FIX.5.0SP2
|
||||||
|
TransportDataDictionary=../spec/FIXT11.xml
|
||||||
|
AppDataDictionary=../spec/FIX50SP2.xml
|
||||||
|
ResendRequestChunkSize=5
|
||||||
10
quickfix/_test/cfg/server/fix40.cfg
Normal file
10
quickfix/_test/cfg/server/fix40.cfg
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5001
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIX.4.0
|
||||||
|
DataDictionary=../spec/FIX40.xml
|
||||||
10
quickfix/_test/cfg/server/fix41.cfg
Normal file
10
quickfix/_test/cfg/server/fix41.cfg
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5002
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIX.4.1
|
||||||
|
DataDictionary=../spec/FIX41.xml
|
||||||
10
quickfix/_test/cfg/server/fix42.cfg
Normal file
10
quickfix/_test/cfg/server/fix42.cfg
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5003
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIX.4.2
|
||||||
|
DataDictionary=../spec/FIX42.xml
|
||||||
10
quickfix/_test/cfg/server/fix43.cfg
Normal file
10
quickfix/_test/cfg/server/fix43.cfg
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5004
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIX.4.3
|
||||||
|
DataDictionary=../spec/FIX43.xml
|
||||||
10
quickfix/_test/cfg/server/fix44.cfg
Normal file
10
quickfix/_test/cfg/server/fix44.cfg
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5005
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIX.4.4
|
||||||
|
DataDictionary=../spec/FIX44.xml
|
||||||
13
quickfix/_test/cfg/server/fix50.cfg
Normal file
13
quickfix/_test/cfg/server/fix50.cfg
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5006
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIXT.1.1
|
||||||
|
SessionQualifier=FIX50
|
||||||
|
DefaultApplVerID=FIX.5.0
|
||||||
|
TransportDataDictionary=../spec/FIXT11.xml
|
||||||
|
AppDataDictionary=../spec/FIX50.xml
|
||||||
13
quickfix/_test/cfg/server/fix50sp1.cfg
Normal file
13
quickfix/_test/cfg/server/fix50sp1.cfg
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5007
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIXT.1.1
|
||||||
|
SessionQualifier=FIX50SP1
|
||||||
|
DefaultApplVerID=FIX.5.0SP1
|
||||||
|
TransportDataDictionary=../spec/FIXT11.xml
|
||||||
|
AppDataDictionary=../spec/FIX50SP1.xml
|
||||||
13
quickfix/_test/cfg/server/fix50sp2.cfg
Normal file
13
quickfix/_test/cfg/server/fix50sp2.cfg
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
SocketAcceptPort=5008
|
||||||
|
SenderCompID=ISLD
|
||||||
|
TargetCompID=TW
|
||||||
|
ResetOnLogon=Y
|
||||||
|
FileLogPath=tmp
|
||||||
|
|
||||||
|
[SESSION]
|
||||||
|
BeginString=FIXT.1.1
|
||||||
|
SessionQualifier=FIX50SP2
|
||||||
|
DefaultApplVerID=FIX.5.0SP2
|
||||||
|
TransportDataDictionary=../spec/FIXT11.xml
|
||||||
|
AppDataDictionary=../spec/FIX50SP2.xml
|
||||||
5
quickfix/_test/definitions/fields.fmt
Normal file
5
quickfix/_test/definitions/fields.fmt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
10=\d{3}
|
||||||
|
42=\d{8}-\d{2}:\d{2}:\d{2}
|
||||||
|
52=\d{8}-\d{2}:\d{2}:\d{2}|\d{8}-\d{2}:\d{2}:\d{2}[.]\d{3}
|
||||||
|
60=\d{8}-\d{2}:\d{2}:\d{2}
|
||||||
|
122=\d{8}-\d{2}:\d{2}:\d{2}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
iCONNECT
|
||||||
|
|
||||||
|
I8=FIX.4.235=A34=149=TW52=<TIME>56=ISLD369=098=0108=2
|
||||||
|
E8=FIX.4.29=6635=A34=149=ISLD52=00000000-00:00:00.00056=TW369=198=0108=210=0
|
||||||
|
|
||||||
|
I8=FIX.4.235=134=249=TW52=<TIME>56=ISLD369=1112=HELLO
|
||||||
|
E8=FIX.4.29=6535=034=249=ISLD52=00000000-00:00:00.00056=TW369=2112=HELLO10=0
|
||||||
|
|
||||||
|
I8=FIX.4.235=034=349=TW52=<TIME>56=ISLD369=2
|
||||||
|
|
||||||
|
I8=FIX.4.235=034=449=TW52=<TIME>56=ISLD369=2
|
||||||
|
|
||||||
|
E8=FIX.4.29=5535=034=349=ISLD52=00000000-00:00:00.00056=TW369=410=0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# logout message and response
|
||||||
|
I8=FIX.4.235=534=549=TW52=<TIME>56=ISLD369=3
|
||||||
|
E8=FIX.4.29=5535=534=449=ISLD52=00000000-00:00:00.00056=TW369=510=0
|
||||||
|
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
iCONNECT
|
||||||
|
|
||||||
|
I8=FIX.4.335=A34=149=TW52=<TIME>56=ISLD369=098=0108=2
|
||||||
|
E8=FIX.4.39=6635=A34=149=ISLD52=00000000-00:00:00.00056=TW369=198=0108=210=0
|
||||||
|
|
||||||
|
I8=FIX.4.335=134=249=TW52=<TIME>56=ISLD369=1112=HELLO
|
||||||
|
E8=FIX.4.39=6535=034=249=ISLD52=00000000-00:00:00.00056=TW369=2112=HELLO10=0
|
||||||
|
|
||||||
|
I8=FIX.4.335=034=349=TW52=<TIME>56=ISLD369=2
|
||||||
|
|
||||||
|
I8=FIX.4.335=034=449=TW52=<TIME>56=ISLD369=2
|
||||||
|
|
||||||
|
E8=FIX.4.39=5535=034=349=ISLD52=00000000-00:00:00.00056=TW369=410=0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# logout message and response
|
||||||
|
I8=FIX.4.335=534=549=TW52=<TIME>56=ISLD369=3
|
||||||
|
E8=FIX.4.39=5535=534=449=ISLD52=00000000-00:00:00.00056=TW369=510=0
|
||||||
|
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
iCONNECT
|
||||||
|
|
||||||
|
I8=FIX.4.435=A34=149=TW52=<TIME>56=ISLD369=098=0108=2
|
||||||
|
E8=FIX.4.49=6635=A34=149=ISLD52=00000000-00:00:00.00056=TW369=198=0108=210=0
|
||||||
|
|
||||||
|
I8=FIX.4.435=134=249=TW52=<TIME>56=ISLD369=1112=HELLO
|
||||||
|
E8=FIX.4.49=6535=034=249=ISLD52=00000000-00:00:00.00056=TW369=2112=HELLO10=0
|
||||||
|
|
||||||
|
I8=FIX.4.435=034=349=TW52=<TIME>56=ISLD369=2
|
||||||
|
|
||||||
|
I8=FIX.4.435=034=449=TW52=<TIME>56=ISLD369=2
|
||||||
|
|
||||||
|
E8=FIX.4.49=5535=034=349=ISLD52=00000000-00:00:00.00056=TW369=410=0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# logout message and response
|
||||||
|
I8=FIX.4.435=534=549=TW52=<TIME>56=ISLD369=3
|
||||||
|
E8=FIX.4.49=5535=534=449=ISLD52=00000000-00:00:00.00056=TW369=510=0
|
||||||
|
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
iCONNECT
|
||||||
|
|
||||||
|
I8=FIXT.1.135=A34=149=TW52=<TIME>56=ISLD369=098=0108=21137=7
|
||||||
|
E8=FIXT.1.19=7335=A34=149=ISLD52=00000000-00:00:00.00056=TW369=198=0108=21137=710=0
|
||||||
|
|
||||||
|
I8=FIXT.1.135=134=249=TW52=<TIME>56=ISLD369=1112=HELLO
|
||||||
|
E8=FIXT.1.19=6535=034=249=ISLD52=00000000-00:00:00.00056=TW369=2112=HELLO10=0
|
||||||
|
|
||||||
|
I8=FIXT.1.135=034=349=TW52=<TIME>56=ISLD369=2
|
||||||
|
|
||||||
|
I8=FIXT.1.135=034=449=TW52=<TIME>56=ISLD369=2
|
||||||
|
|
||||||
|
E8=FIXT.1.19=5535=034=349=ISLD52=00000000-00:00:00.00056=TW369=410=0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# logout message and response
|
||||||
|
I8=FIXT.1.135=534=549=TW52=<TIME>56=ISLD369=3
|
||||||
|
E8=FIXT.1.19=5535=534=449=ISLD52=00000000-00:00:00.00056=TW369=510=0
|
||||||
|
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
iCONNECT
|
||||||
|
|
||||||
|
I8=FIXT.1.135=A34=149=TW52=<TIME>56=ISLD369=098=0108=21137=8
|
||||||
|
E8=FIXT.1.19=7335=A34=149=ISLD52=00000000-00:00:00.00056=TW369=198=0108=21137=810=0
|
||||||
|
|
||||||
|
I8=FIXT.1.135=134=249=TW52=<TIME>56=ISLD369=1112=HELLO
|
||||||
|
E8=FIXT.1.19=6535=034=249=ISLD52=00000000-00:00:00.00056=TW369=2112=HELLO10=0
|
||||||
|
|
||||||
|
I8=FIXT.1.135=034=349=TW52=<TIME>56=ISLD369=2
|
||||||
|
|
||||||
|
I8=FIXT.1.135=034=449=TW52=<TIME>56=ISLD369=2
|
||||||
|
|
||||||
|
E8=FIXT.1.19=5535=034=349=ISLD52=00000000-00:00:00.00056=TW369=410=0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# logout message and response
|
||||||
|
I8=FIXT.1.135=534=549=TW52=<TIME>56=ISLD369=3
|
||||||
|
E8=FIXT.1.19=5535=534=449=ISLD52=00000000-00:00:00.00056=TW369=510=0
|
||||||
|
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
iCONNECT
|
||||||
|
|
||||||
|
I8=FIXT.1.135=A34=149=TW52=<TIME>56=ISLD369=098=0108=21137=9
|
||||||
|
E8=FIXT.1.19=7335=A34=149=ISLD52=00000000-00:00:00.00056=TW369=198=0108=21137=910=0
|
||||||
|
|
||||||
|
I8=FIXT.1.135=134=249=TW52=<TIME>56=ISLD369=1112=HELLO
|
||||||
|
E8=FIXT.1.19=6535=034=249=ISLD52=00000000-00:00:00.00056=TW369=2112=HELLO10=0
|
||||||
|
|
||||||
|
I8=FIXT.1.135=034=349=TW52=<TIME>56=ISLD369=2
|
||||||
|
|
||||||
|
I8=FIXT.1.135=034=449=TW52=<TIME>56=ISLD369=2
|
||||||
|
|
||||||
|
E8=FIXT.1.19=5535=034=349=ISLD52=00000000-00:00:00.00056=TW369=410=0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# logout message and response
|
||||||
|
I8=FIXT.1.135=534=549=TW52=<TIME>56=ISLD369=3
|
||||||
|
E8=FIXT.1.19=5535=534=449=ISLD52=00000000-00:00:00.00056=TW369=510=0
|
||||||
|
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
iCONNECT
|
||||||
|
|
||||||
|
#------------------------
|
||||||
|
# logon message and response
|
||||||
|
# send logon with sequence number equals to 1
|
||||||
|
# expect for a logon response with NextExpectedMsgSeqNum field equals to 2
|
||||||
|
#------------------------
|
||||||
|
|
||||||
|
I8=FIX.4.435=A34=149=TW52=<TIME>56=ISLD98=0789=1108=2
|
||||||
|
E8=FIX.4.49=6635=A34=149=ISLD52=00000000-00:00:00.00056=TW98=0108=2789=210=0
|
||||||
|
|
||||||
|
# logout message and response
|
||||||
|
I8=FIX.4.435=534=249=TW52=<TIME>56=ISLD
|
||||||
|
E8=FIX.4.49=4935=534=249=ISLD52=00000000-00:00:00.00056=TW10=0
|
||||||
|
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
# If message NextExpectedMsgSeqNum field is too high, we must disconnect
|
||||||
|
|
||||||
|
iCONNECT
|
||||||
|
iSET_SESSION FIX.4.4:ISLD->TW NEXTSENDERSEQNUM=1
|
||||||
|
iSET_SESSION FIX.4.4:ISLD->TW NEXTTARGETSEQNUM=1
|
||||||
|
|
||||||
|
I8=FIX.4.435=A34=100049=TW52=<TIME>56=ISLD98=0789=1200108=30
|
||||||
|
|
||||||
|
E8=FIX.4.49=13535=534=149=ISLD52=00000000-00:00:00.00056=TW58=Tag 789 (NextExpectedMsgSeqNum) is higher than expected. Expected 1, Received 120010=0
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
iCONNECT
|
||||||
|
iSET_SESSION FIX.4.4:ISLD->TW NEXTSENDERSEQNUM=2000
|
||||||
|
iSET_SESSION FIX.4.4:ISLD->TW NEXTTARGETSEQNUM=1
|
||||||
|
|
||||||
|
I8=FIX.4.435=A34=149=TW52=<TIME>56=ISLD98=0789=1108=30
|
||||||
|
|
||||||
|
E8=FIX.4.49=7035=A34=200049=ISLD52=00000000-00:00:00.00056=TW98=0108=30789=210=0
|
||||||
|
E8=FIX.4.49=9435=434=143=Y49=ISLD52=<TIME>56=TW122=<TIME>36=2001123=Y
|
||||||
|
|
||||||
|
# logout message and response
|
||||||
|
I8=FIX.4.435=534=249=TW52=<TIME>56=ISLD
|
||||||
|
E8=FIX.4.49=5235=534=200149=ISLD52=00000000-00:00:00.00056=TW10=0
|
||||||
|
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
# FIX Logon using tag 141/ResetSeqNumFlag and tag 789/NextExpectedSeqMsgNum
|
||||||
|
|
||||||
|
iCONNECT
|
||||||
|
iSET_SESSION FIX.4.4:ISLD->TW NEXTSENDERSEQNUM=2000
|
||||||
|
iSET_SESSION FIX.4.4:ISLD->TW NEXTTARGETSEQNUM=2000
|
||||||
|
|
||||||
|
I8=FIX.4.435=A34=149=TW52=<TIME>56=ISLD98=0789=1141=Y108=30
|
||||||
|
E8=FIX.4.49=7335=A34=149=ISLD52=00000000-00:00:00.00056=TW98=0108=30141=Y789=210=0
|
||||||
|
|
||||||
|
# logout message and response
|
||||||
|
I8=FIX.4.435=534=249=TW52=<TIME>56=ISLD
|
||||||
|
E8=FIX.4.49=4935=534=249=ISLD52=00000000-00:00:0056=TW10=0
|
||||||
|
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
iCONNECT
|
||||||
|
|
||||||
|
#------------------------
|
||||||
|
# logon message and response
|
||||||
|
# send logon with sequence number equals to 1
|
||||||
|
# expect for a logon response with NextExpectedMsgSeqNum field equals to 2
|
||||||
|
#------------------------
|
||||||
|
|
||||||
|
I8=FIXT.1.135=A34=149=TW52=<TIME>56=ISLD98=0789=11137=7108=2
|
||||||
|
E8=FIXT.1.19=7335=A34=149=ISLD52=00000000-00:00:00.00056=TW98=0108=2789=21137=710=0
|
||||||
|
|
||||||
|
# logout message and response
|
||||||
|
I8=FIXT.1.135=534=249=TW52=<TIME>56=ISLD
|
||||||
|
E8=FIXT.1.19=4935=534=249=ISLD52=00000000-00:00:00.00056=TW10=0
|
||||||
|
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
# If message NextExpectedMsgSeqNum field is too high, we must disconnect
|
||||||
|
|
||||||
|
iCONNECT
|
||||||
|
iSET_SESSION FIXT.1.1:ISLD->TW NEXTSENDERSEQNUM=1
|
||||||
|
iSET_SESSION FIXT.1.1:ISLD->TW NEXTTARGETSEQNUM=1
|
||||||
|
I8=FIXT.1.135=A34=100049=TW52=<TIME>56=ISLD98=0789=12001137=7108=30
|
||||||
|
|
||||||
|
E8=FIXT.1.19=13535=534=149=ISLD52=00000000-00:00:00.00056=TW58=Tag 789 (NextExpectedMsgSeqNum) is higher than expected. Expected 1, Received 120010=0
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
iCONNECT
|
||||||
|
iSET_SESSION FIXT.1.1:ISLD->TW NEXTSENDERSEQNUM=2000
|
||||||
|
iSET_SESSION FIXT.1.1:ISLD->TW NEXTTARGETSEQNUM=1
|
||||||
|
|
||||||
|
I8=FIXT.1.135=A34=149=TW52=<TIME>56=ISLD98=0789=11137=7108=30
|
||||||
|
|
||||||
|
E8=FIXT.1.19=7735=A34=200049=ISLD52=00000000-00:00:00.00056=TW98=0108=30789=21137=710=0
|
||||||
|
E8=FIXT.1.19=9435=434=143=Y49=ISLD52=<TIME>56=TW122=<TIME>36=2001123=Y
|
||||||
|
|
||||||
|
# logout message and response
|
||||||
|
I8=FIXT.1.135=534=249=TW52=<TIME>56=ISLD
|
||||||
|
E8=FIXT.1.19=5235=534=200149=ISLD52=00000000-00:00:00.00056=TW10=0
|
||||||
|
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
# FIX Logon using tag 141/ResetSeqNumFlag and tag 789/NextExpectedSeqMsgNum
|
||||||
|
|
||||||
|
iCONNECT
|
||||||
|
iSET_SESSION FIXT.1.1:ISLD->TW NEXTSENDERSEQNUM=2000
|
||||||
|
iSET_SESSION FIXT.1.1:ISLD->TW NEXTTARGETSEQNUM=2000
|
||||||
|
|
||||||
|
I8=FIXT.1.135=A34=149=TW52=<TIME>56=ISLD98=0789=1141=Y1137=7108=30
|
||||||
|
E8=FIXT.1.19=8035=A34=149=ISLD52=00000000-00:00:00.00056=TW98=0108=30141=Y789=21137=710=0
|
||||||
|
|
||||||
|
# logout message and response
|
||||||
|
I8=FIXT.1.135=534=249=TW52=<TIME>56=ISLD
|
||||||
|
E8=FIXT.1.19=4935=534=249=ISLD52=00000000-00:00:00.00056=TW10=0
|
||||||
|
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
iCONNECT
|
||||||
|
|
||||||
|
#------------------------
|
||||||
|
# logon message and response
|
||||||
|
# send logon with sequence number equals to 1
|
||||||
|
# expect for a logon response with NextExpectedMsgSeqNum field equals to 2
|
||||||
|
#------------------------
|
||||||
|
|
||||||
|
I8=FIXT.1.135=A34=149=TW52=<TIME>56=ISLD98=0789=11137=8108=2
|
||||||
|
E8=FIXT.1.19=7335=A34=149=ISLD52=00000000-00:00:00.00056=TW98=0108=2789=21137=810=0
|
||||||
|
|
||||||
|
# logout message and response
|
||||||
|
I8=FIXT.1.135=534=249=TW52=<TIME>56=ISLD
|
||||||
|
E8=FIXT.1.19=4935=534=249=ISLD52=00000000-00:00:00.00056=TW10=0
|
||||||
|
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
# If message NextExpectedMsgSeqNum field is too high, we must disconnect
|
||||||
|
|
||||||
|
iCONNECT
|
||||||
|
iSET_SESSION FIXT.1.1:ISLD->TW NEXTSENDERSEQNUM=1
|
||||||
|
iSET_SESSION FIXT.1.1:ISLD->TW NEXTTARGETSEQNUM=1
|
||||||
|
I8=FIXT.1.135=A34=100049=TW52=<TIME>56=ISLD98=0789=12001137=8108=30
|
||||||
|
|
||||||
|
E8=FIXT.1.19=13535=534=149=ISLD52=00000000-00:00:00.00056=TW58=Tag 789 (NextExpectedMsgSeqNum) is higher than expected. Expected 1, Received 120010=0
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
iCONNECT
|
||||||
|
iSET_SESSION FIXT.1.1:ISLD->TW NEXTSENDERSEQNUM=2000
|
||||||
|
iSET_SESSION FIXT.1.1:ISLD->TW NEXTTARGETSEQNUM=1
|
||||||
|
|
||||||
|
I8=FIXT.1.135=A34=149=TW52=<TIME>56=ISLD98=0789=11137=10108=30
|
||||||
|
|
||||||
|
E8=FIXT.1.19=7735=A34=200049=ISLD52=00000000-00:00:00.00056=TW98=0108=30789=21137=810=0
|
||||||
|
E8=FIXT.1.19=9435=434=143=Y49=ISLD52=<TIME>56=TW122=<TIME>36=2001123=Y
|
||||||
|
|
||||||
|
# logout message and response
|
||||||
|
I8=FIXT.1.135=534=249=TW52=<TIME>56=ISLD
|
||||||
|
E8=FIXT.1.19=5235=534=200149=ISLD52=00000000-00:00:00.00056=TW10=0
|
||||||
|
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
# FIX Logon using tag 141/ResetSeqNumFlag and tag 789/NextExpectedSeqMsgNum
|
||||||
|
|
||||||
|
iCONNECT
|
||||||
|
iSET_SESSION FIXT.1.1:ISLD->TW NEXTSENDERSEQNUM=2000
|
||||||
|
iSET_SESSION FIXT.1.1:ISLD->TW NEXTTARGETSEQNUM=2000
|
||||||
|
|
||||||
|
I8=FIXT.1.135=A34=149=TW52=<TIME>56=ISLD98=0789=1141=Y1137=8108=30
|
||||||
|
E8=FIXT.1.19=8035=A34=149=ISLD52=00000000-00:00:00.00056=TW98=0108=30141=Y789=21137=810=0
|
||||||
|
|
||||||
|
# logout message and response
|
||||||
|
I8=FIXT.1.135=534=249=TW52=<TIME>56=ISLD
|
||||||
|
E8=FIXT.1.19=4935=534=249=ISLD52=00000000-00:00:00.00056=TW10=0
|
||||||
|
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
iCONNECT
|
||||||
|
|
||||||
|
#------------------------
|
||||||
|
# logon message and response
|
||||||
|
# send logon with sequence number equals to 1
|
||||||
|
# expect for a logon response with NextExpectedMsgSeqNum field equals to 2
|
||||||
|
#------------------------
|
||||||
|
|
||||||
|
I8=FIXT.1.135=A34=149=TW52=<TIME>56=ISLD98=0789=11137=9108=2
|
||||||
|
E8=FIXT.1.19=7335=A34=149=ISLD52=00000000-00:00:00.00056=TW98=0108=2789=21137=910=0
|
||||||
|
|
||||||
|
# logout message and response
|
||||||
|
I8=FIXT.1.135=534=249=TW52=<TIME>56=ISLD
|
||||||
|
E8=FIXT.1.19=4935=534=249=ISLD52=00000000-00:00:00.00056=TW10=0
|
||||||
|
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
# If message NextExpectedMsgSeqNum field is too high, we must disconnect
|
||||||
|
|
||||||
|
iCONNECT
|
||||||
|
iSET_SESSION FIXT.1.1:ISLD->TW NEXTSENDERSEQNUM=1
|
||||||
|
iSET_SESSION FIXT.1.1:ISLD->TW NEXTTARGETSEQNUM=1
|
||||||
|
I8=FIXT.1.135=A34=100049=TW52=<TIME>56=ISLD98=0789=12001137=9108=30
|
||||||
|
|
||||||
|
E8=FIXT.1.19=13535=534=149=ISLD52=00000000-00:00:00.00056=TW58=Tag 789 (NextExpectedMsgSeqNum) is higher than expected. Expected 1, Received 120010=0
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
iCONNECT
|
||||||
|
iSET_SESSION FIXT.1.1:ISLD->TW NEXTSENDERSEQNUM=2000
|
||||||
|
iSET_SESSION FIXT.1.1:ISLD->TW NEXTTARGETSEQNUM=1
|
||||||
|
|
||||||
|
I8=FIXT.1.135=A34=149=TW52=<TIME>56=ISLD98=0789=11137=9108=30
|
||||||
|
|
||||||
|
E8=FIXT.1.19=7735=A34=200049=ISLD52=00000000-00:00:00.00056=TW98=0108=30789=21137=910=0
|
||||||
|
E8=FIXT.1.19=9435=434=143=Y49=ISLD52=<TIME>56=TW122=<TIME>36=2001123=Y
|
||||||
|
|
||||||
|
# logout message and response
|
||||||
|
I8=FIXT.1.135=534=249=TW52=<TIME>56=ISLD
|
||||||
|
E8=FIXT.1.19=5235=534=200149=ISLD52=00000000-00:00:00.00056=TW10=0
|
||||||
|
|
||||||
|
eDISCONNECT
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
# FIX Logon using tag 141/ResetSeqNumFlag and tag 789/NextExpectedSeqMsgNum
|
||||||
|
|
||||||
|
iCONNECT
|
||||||
|
iSET_SESSION FIXT.1.1:ISLD->TW NEXTSENDERSEQNUM=2000
|
||||||
|
iSET_SESSION FIXT.1.1:ISLD->TW NEXTTARGETSEQNUM=2000
|
||||||
|
|
||||||
|
I8=FIXT.1.135=A34=149=TW52=<TIME>56=ISLD98=0789=1141=Y1137=9108=30
|
||||||
|
E8=FIXT.1.19=8035=A34=149=ISLD52=00000000-00:00:00.00056=TW98=0108=30141=Y789=21137=910=0
|
||||||
|
|
||||||
|
# logout message and response
|
||||||
|
I8=FIXT.1.135=534=249=TW52=<TIME>56=ISLD
|
||||||
|
E8=FIXT.1.19=4935=534=249=ISLD52=00000000-00:00:00.00056=TW10=0
|
||||||
|
|
||||||
|
eDISCONNECT
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user