Changeset 1601 for pjproject/trunk/pjlib/src/pj/ioqueue_symbian.cpp
- Timestamp:
- Dec 1, 2007 8:52:57 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjlib/src/pj/ioqueue_symbian.cpp
r1384 r1601 233 233 PJ_ASSERT_RETURN(pending_data_.common_.op_key_==NULL, PJ_EBUSY); 234 234 235 // addrlen must be specified if local or remote is specified 236 PJ_ASSERT_RETURN((!local && !remote) || 237 (addrlen && *addrlen), PJ_EINVAL); 238 235 239 pending_data_.accept_.op_key_ = op_key; 236 240 pending_data_.accept_.new_sock_ = new_sock; … … 255 259 void CIoqueueCallback::HandleReadCompletion() 256 260 { 257 if (pending_data_.read_.addr_ ) {261 if (pending_data_.read_.addr_ && pending_data_.read_.addrlen_) { 258 262 PjSymbianOS::Addr2pj(aAddress_, 259 *(pj_sockaddr_in*)pending_data_.read_.addr_); 263 *(pj_sockaddr*)pending_data_.read_.addr_, 264 pending_data_.read_.addrlen_); 260 265 pending_data_.read_.addr_ = NULL; 261 }262 if (pending_data_.read_.addrlen_) {263 *pending_data_.read_.addrlen_ = sizeof(pj_sockaddr_in);264 266 pending_data_.read_.addrlen_ = NULL; 265 267 } … … 274 276 CPjSocket *CIoqueueCallback::HandleAcceptCompletion() 275 277 { 276 CPjSocket *pjNewSock = new CPjSocket(blank_sock_); 277 278 CPjSocket *pjNewSock = new CPjSocket(get_pj_socket()->GetAf(), 279 blank_sock_); 280 int addrlen = 0; 281 278 282 if (pending_data_.accept_.new_sock_) { 279 283 *pending_data_.accept_.new_sock_ = (pj_sock_t)pjNewSock; … … 283 287 if (pending_data_.accept_.local_) { 284 288 TInetAddr aAddr; 285 pj_sockaddr _in*ptr_sockaddr;286 289 pj_sockaddr *ptr_sockaddr; 290 287 291 blank_sock_.LocalName(aAddr); 288 ptr_sockaddr = (pj_sockaddr_in*)pending_data_.accept_.local_; 289 PjSymbianOS::Addr2pj(aAddr, *ptr_sockaddr); 292 ptr_sockaddr = (pj_sockaddr*)pending_data_.accept_.local_; 293 addrlen = *pending_data_.accept_.addrlen_; 294 PjSymbianOS::Addr2pj(aAddr, *ptr_sockaddr, &addrlen); 290 295 pending_data_.accept_.local_ = NULL; 291 296 } … … 293 298 if (pending_data_.accept_.remote_) { 294 299 TInetAddr aAddr; 295 pj_sockaddr _in*ptr_sockaddr;300 pj_sockaddr *ptr_sockaddr; 296 301 297 302 blank_sock_.RemoteName(aAddr); 298 ptr_sockaddr = (pj_sockaddr_in*)pending_data_.accept_.remote_; 299 PjSymbianOS::Addr2pj(aAddr, *ptr_sockaddr); 303 ptr_sockaddr = (pj_sockaddr*)pending_data_.accept_.remote_; 304 addrlen = *pending_data_.accept_.addrlen_; 305 PjSymbianOS::Addr2pj(aAddr, *ptr_sockaddr, &addrlen); 300 306 pending_data_.accept_.remote_ = NULL; 301 307 } 302 308 303 309 if (pending_data_.accept_.addrlen_) { 304 *pending_data_.accept_.addrlen_ = sizeof(pj_sockaddr_in); 310 if (addrlen == 0) { 311 if (pjNewSock->GetAf() == PJ_AF_INET) 312 addrlen = sizeof(pj_sockaddr_in); 313 else if (pjNewSock->GetAf() == PJ_AF_INET6) 314 addrlen = sizeof(pj_sockaddr_in6); 315 else { 316 pj_assert(!"Unsupported address family"); 317 } 318 } 319 *pending_data_.accept_.addrlen_ = addrlen; 305 320 pending_data_.accept_.addrlen_ = NULL; 306 321 } … … 606 621 int addrlen ) 607 622 { 608 PJ_ASSERT_RETURN(addrlen == sizeof(pj_sockaddr_in), PJ_EINVAL);609 623 pj_status_t status; 624 610 625 RSocket &rSock = key->cbObj->get_pj_socket()->Socket(); 611 626 TInetAddr inetAddr; 612 PjSymbianOS::pj2Addr(*(const pj_sockaddr_in*)addr, inetAddr);613 627 TRequestStatus reqStatus; 614 628 629 // Convert address 630 status = PjSymbianOS::pj2Addr(*(const pj_sockaddr*)addr, addrlen, 631 inetAddr); 632 if (status != PJ_SUCCESS) 633 return status; 634 615 635 // We don't support async connect for now. 616 636 PJ_TODO(IOQUEUE_SUPPORT_ASYNC_CONNECT); … … 675 695 int *addrlen) 676 696 { 697 CPjSocket *sock = key->cbObj->get_pj_socket(); 698 699 // If address is specified, check that the length match the 700 // address family 701 if (addr || addrlen) { 702 PJ_ASSERT_RETURN(addr && addrlen && *addrlen, PJ_EINVAL); 703 if (sock->GetAf() == PJ_AF_INET) { 704 PJ_ASSERT_RETURN(*addrlen >= sizeof(pj_sockaddr_in), PJ_EINVAL); 705 } else if (sock->GetAf() == PJ_AF_INET6) { 706 PJ_ASSERT_RETURN(*addrlen >= sizeof(pj_sockaddr_in6), PJ_EINVAL); 707 } 708 } 709 677 710 // If socket has reader, delete it. 678 if ( key->cbObj->get_pj_socket()->Reader())679 key->cbObj->get_pj_socket()->DestroyReader();711 if (sock->Reader()) 712 sock->DestroyReader(); 680 713 681 714 if (key->cbObj->IsActive()) … … 737 770 TInetAddr inetAddr; 738 771 TSockXfrLength aLen; 772 pj_status_t status; 739 773 740 774 PJ_UNUSED_ARG(op_key); … … 743 777 PJ_ASSERT_RETURN((flags & PJ_IOQUEUE_ALWAYS_ASYNC)==0, PJ_EINVAL); 744 778 745 // Must be pj_sockaddr_in for now. 746 PJ_ASSERT_RETURN(addrlen == sizeof(pj_sockaddr_in), PJ_EINVAL); 747 779 // Convert address 780 status = PjSymbianOS::pj2Addr(*(const pj_sockaddr*)addr, addrlen, 781 inetAddr); 782 if (status != PJ_SUCCESS) 783 return status; 784 748 785 // Clear flag 749 786 flags &= ~PJ_IOQUEUE_ALWAYS_ASYNC; 750 787 751 788 aBuffer.Set((const TUint8*)data, (TInt)*length); 752 PjSymbianOS::pj2Addr(*(const pj_sockaddr_in*)addr, inetAddr);753 789 CPjSocket *pjSock = key->cbObj->get_pj_socket(); 754 790
Note: See TracChangeset
for help on using the changeset viewer.