Я использовал openfire в качестве сервера xmpp и хочу передать файл через Turnsocket.
Конфигурация openfire (локальная):
xmpp.auth.anonymous true
xmpp.domain local
xmpp.enabled true
xmpp.externalip proxy.local, 192.168.1.101, 127.0.0.1
xmpp.proxy.enabled true
xmpp.proxy.port 7777
xmpp.proxy.transfer.required false
xmpp.server.socket.active true
xmpp.session.conflict.limit 0
xmpp.socket.ssl.active true
Я проверил передачу файлов в локальной среде, один пользователь вошел в систему с помощью Simulator (отправитель), другой пользователь вошел в систему с помощью устройства (iPod, приемник).
TURNSocket.m (оба изменены), сменить прокси
+ (void)initialize {
...
proxyCandidates = [[NSMutableArray alloc] initWithObjects:@"local", nil];
...
}
Настройка отправителя и получателя
- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq {
...
if ([TURNSocket isNewStartTURNRequest:iq]) {
NSLog(@"IS NEW TURN request Receive.. TURNSocket..................");
TURNSocket *turnSocket = [[TURNSocket alloc] initWithStream:xmppStream incomingTURNRequest:iq];
[turnSockets addObject:turnSocket];
[turnSocket startWithDelegate:self delegateQueue:dispatch_get_main_queue()];
[turnSocket release];
}
return YES;
}
Настройка и вызов TURNSocket (Отправитель)
TURNSocket *turnSocket = [[TURNSocket alloc] initWithStream:[self xmppStream] toJID:user.primaryResource.jid];
[turnSockets addObject:turnSocket];
[turnSocket startWithDelegate:self delegateQueue:dispatch_get_main_queue()];
[turnSocket release];
didSucceed вызвал обоих (отправитель и получатель)
- (void)turnSocket:(TURNSocket *)sender didSucceed:(GCDAsyncSocket *)socket {
}
Отправить файл? на отправителя
- (void)turnSocket:(TURNSocket *)sender didSucceed:(GCDAsyncSocket *)socket {
NSData *dataF = [[NSData alloc] initWithContentsOfFile:
[[NSBundle mainBundle] pathForResource:@"a1" ofType:@"png"]];
[socket writeData:dataF withTimeout:60.0f tag:0];
}
ИЛИ: Полученные данные здесь? (Приемник)
- (void)turnSocket:(TURNSocket *)sender didSucceed:(GCDAsyncSocket *)socket {
NSData *dataF = [[NSData alloc] init];
[socket readDataToData:dataF withTimeout:30.0 tag:0];
NSLog(@"dataF: %d", [dataF length]); // dataF: 0
}
Кто-нибудь знает в чем проблема?
Большое спасибо!