我正在爲X11工作一個代理服務器,它也會對某些數據做一些輕微的數據操作(顏色深度,水印等)。我已經建立並運行了連接,並且正在操作177/UDP連接中的服務器IP,因此客戶端通過代理正確連接,而不是調用服務器。換句話說,我有一個功能齊全的代理,它通過端口6000從客戶端到服務器代理數據。X11協議中String8(ListOfCARD8)的長度
我現在試圖做的是解析數據流,並找到每條消息的開始和類型以清除我將從需要處理的數據傳遞的數據。不過,我很早就遇到了麻煩。
我從客戶端獲得的數據是帶字節序的單個字節(在我的例子中是'B',但是我支持這兩個字節),接着2個字節用於主要版本(3)和2次要版本的字節(11)。這兩個都在協議規範中指定爲CARD16(http://tools.ietf.org/html/rfc1013)。 以下是授權名稱,即類型STRING8的授權使用類型。 STRING8在文檔中被指定爲LISTOFCARD8,意思是8位無符號整數的列表。
問題出在這裏:LISTOFCARD8有多長時間沒有。 從規範中截取:「長度字段的大小可能會有所不同(它不是 必須與FOO的大小相同),在某些情況下可能是隱含的,並且在本文檔中未完全指定。
從字節5開始,數據流中的實際數據是0 0 12 0 10 0 0,然後是實際數據流(ASCII字符串「MIT-MAGIC-COOKIE-1」)。我無法從它之前的第n個字節中確定有效的字符串長度,並且字符串本身似乎不是空終止的。
所以,對於我的問題,如果它還沒有遇到過:如何確定ListOfFOO的長度,或更具體地說是ListOfCARD8,如RFC 1013中規定的那樣?
謝謝! // Eric Johansson
謝謝你,我沒有看到這一點。這個規範看起來好多了,但是我仍然找不到String8長度的任何規範。 String8只映射到LISTofCARD8,而LISTofFOO只是說長度編碼爲「別處」。 –
沒關係,我找到了解釋長度的連接消息的新的更好的解釋。謝謝! –
@EricJohansson如果你還在身邊,請分享! –