On Mar 27, 2014, at 8:35 PM, Yunkai Zhang <yunkai...@gmail.com> wrote:
> On Fri, Mar 28, 2014 at 8:00 AM, James Peach <jpe...@apache.org> wrote: > >> On Mar 13, 2014, at 2:56 PM, James Peach <jpe...@apache.org> wrote: >> >>> On Mar 11, 2014, at 8:12 PM, yun...@apache.org wrote: >>> >>>> TS-2612: Indroduce TSHttpConnectWithProtoStack() API >>>> >>>> 1) Firstly, add a bitmask, *proto_stack*, in NetVConnection/HttpSM, >>>> and set it properly. >>>> >>>> 2) For some plugins that using TSHttpConnect() API to do request, >>>> the Logging module can't know what protocol stack is used, so I >>>> add a new API: >>>> >>>> TSHttpConnectWithProtoStack(struct sockaddr const* addr, >>>> TSClientProtoStack proto_stack); >>>> >>>> After introducing TSHttpConnectWithProtoStack() API, TSHttpConnect() API >>>> would be a special case of it: >>>> >>>> TSVConn >>>> TSHttpConnect(sockaddr const* addr) >>>> { >>>> return TSHttpConnectWithProtoStack(addr, (1u << TS_PROTO_HTTP)); >>>> } >>>> >>>> Signed-off-by: Yunkai Zhang <qiushu....@taobao.com> >>> >>> This needs API review since the final form of the API was not reviewed >> on dev@. I'll try to review this next week. Everyone else who reviewed >> the original proposal should also review :) >> >> I like the name "TSClientProtoStack". I don't like that it is tied to >> TSHttpConnect; since it is a property of the VConn, doesn't it make more >> sense to be able to get and set it on a TSVConn? >> > > It seems not easy to do that, before a new VConn returned by > TSHttpConnect() API, the connection might have been established > asynchronously. That is say, unexpected client proto stack whould be passed > to HttpSM before it was set, and HttpSM will copy the unexpected value to > its internal HttpSM->proto_stack variable -- IIUC, logging module should > not read VConn->proto_stack directly as VConn might have been released in > logging phase. Pretty sure that this would affect TSHttpConnectTransparent, TSFetchUrl and TSFetchPages. If that's the case, I guess we can lump this with the other issues for needing a new HTTP request API. I guess TSNetConnect does not get logged anyway, right? >> I don't think that users should have to deal with the bitmask >> representation directly. It would be better to separate this into 2 types >> (transport protocol and application protocol), and then do the bitshifting >> internally. We should have internal helper functions to unpack the >> bitfields. >> > > I just worry about that there may exist some clients contain more than 2 > types in its proto stack in the future. TSClientProtoStack TSClientProtoStackCreate(TSProtoType, ...) // Websockets over SPDY over TLS ... protostack = TSClientProtoStackCreate(TS_PROTO_TCP, TS_PROTO_TLS, TS_PROTO_SPDY, TS_PROTO_WBSK, TS_PROTO_MAX); What do you think? J