On 24 Jul 2007, at 7:44 AM, James Howison wrote:

>
> On Jul 20, 2007, at 1:52 PM, James Howison wrote:
>
>>
>> On Jul 20, 2007, at 1:32 PM, Adam R. Maxwell wrote:
>>
>>>
>>> On Friday, July 20, 2007, at 10:16AM, "James Howison"
>>> <[EMAIL PROTECTED]> wrote:
>>>> I think the WoS searching is great, but for me it only works when
>>>> I'm
>>>> 'on-campus' since ISI's web-services do IP based authentication.
>>>> Unfortunately my universities VPN won't route off-campus traffic  
>>>> for
>>>> me, so that doesn't work.  Is there a way to handle this that I'm
>>>> missing?
>>>
>>> Switch universities?  I haven't tried using it over the lab's VPN,
>>> but that sounds really lame.
>>
>> It is. I'll switch universities just as soon as I finish this
>> dissertation ;)
>>
>>>> If not, then I think that on release there will be a lot of 'can I
>>>> use it through my proxy' requests, since most schools give  
>>>> access to
>>>> 'on-campus' resources through a proxy.  I've tried messing around
>>>> with that but the way ours is configured I'd have to get the  
>>>> library
>>>> to add the URL for the service (hassle++), then there would have to
>>>> be some UI for logging in.
>>>>
>>>> Another option, perhaps easier to configure, is to let BibDesk  
>>>> use a
>>>> SOCKS5 proxy for WoS (or all) access.  Those without access via an
>>>> actual on-campus SOCKS5 proxy, but have an ssh server on campus can
>>>> use the ssh -ND option to simulate one.
>>>
>>> Well, I can't even ssh into my systems at work, so I have no hope
>>> of using or testing such a proxy.  I also have a correspondingly
>>> low desire of learning what you are talking about ;).  We'll need a
>>> motivated user or developer to figure this out, and make it work
>>> with Apple's web services code, or it won't happen.  Sorry.
>>
>> Understood.  I'll see what I can do.
>
> So I had a go at this but don't think I've cracked it.  It is "meant
> to be easy":
>
> First things first, a working SOCKS proxy server.  I used ssh -D
> 25000 server.syr.edu where server is an on-campus comp that I have
> access to, and tested the proxy to be working using Firefox with
> SwitchProxy.  With that on I see that my IP address is an on-campus  
> one.
>
> Now to get BibDesk to use it for the ISI searches.
>
> The Web Services documentation:
>
> http://developer.apple.com/documentation/Networking/Conceptual/
> UsingWebservices/Web_Services.pdf
>
> says:
>
>> SOCKS Proxy Support
>> WSMethodInvocation uses the same flags as CFSocketStream.h in
>> configuring SOCKS proxy support.
>> You can set the kCFStreamPropertySOCKSProxy property on the
>> invocation and the value will be
>> applied to the underlying stream. See CFSocketStream.h for more
>> information and valid keys.
>
> Some digging shows that the code to do such setting should look a lot
> like this the code below. First you build a Dictionary with the keys/
> values you want for your SOCKS proxy.  Then you are meant to use
> WSMethodInvocationSetProperty() (a c-method) to send this dictionary
> to your stream (or in this case the WSMethodInvocation.)  Note: I
> tried for ages using CFReadStreamSetProperty because of the reference
> to CFSocketStream, I was confused and thought WSMethodInvocation
> implemented that, but as I read the WS pdf more closely I found
> WSMethodInvocationSetProperty.
>
> It was a bit tricky to find where the WSMethodInvocation is, because
> the Web Services code is a bit of a 'factory pattern' mystery to me.
> But it seems like the Invocation gets created in  
> WSGeneratedObj.m:getRef
>
> I added this code in between creating and returning the
> WSMethodInvocationRef (ie around line 70).
>
> NSString *proxyHost = @"localhost";
> NSNumber *proxyPort = [NSNumber numberWithInt:25000];
>
> NSMutableDictionary *settings = [[NSMutableDictionary
> allocWithZone:nil] init];
>
> [settings setObject:proxyHost forKey:(NSString *)
> kCFStreamPropertySOCKSProxyHost];
> [settings setObject:proxyPort forKey:(NSString *)
> kCFStreamPropertySOCKSProxyPort];
>
> CFStringRef proxyKey =  CFSTR("kCFStreamPropertySOCKSProxy");
>
> WSMethodInvocationSetProperty( fRef, proxyKey, (CFDictionaryRef)
> settings );
>
> [settings release];
>
> It compiles fine, but testing it still produces the "you may not have
> permission" message.
>
> Not sure how to check whether the property actually gets set.  I've
> put a breakpoint in around my new code, but a search executes without
> triggering it.  I guess I'm working in the wrong part of the code?
>
> Any ideas on debugging this appreciated.
>
> Thanks,
> James

It should definitely not be in -[WSGeneratedObj getRef], as that is a  
generic method for an abstract object. I think it should be in the  
concrete implementation -[BDSKISIWebServices genCreateInvocationRef],  
and probably it would make sense to extent the generic method - 
[WSGeneratedObj createInvocationRef:...] to take additional arguments  
for the proxy host/port.

Christiaan


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Bibdesk-develop mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-develop

Reply via email to