+ if (u && (Instance->SE->GetRef(ufd) == u))
+ {
+ u->Shrink("ident_data");
+ }
+ }
+
+ virtual bool OnConnected()
+ {
+ Instance->Log(DEBUG,"Ident: connected");
+ if (u && (Instance->SE->GetRef(ufd) == u))
+ {
+ uslen = sizeof(sock_us);
+ themlen = sizeof(sock_them);
+ if ((getsockname(this->u->GetFd(),(sockaddr*)&sock_us,&uslen) || getpeername(this->u->GetFd(), (sockaddr*)&sock_them, &themlen)))
+ {
+ Instance->Log(DEBUG,"Ident: failed to get socket names, bailing");
+ return false;
+ }
+ else
+ {
+ // send the request in the following format: theirsocket,oursocket
+#ifdef IPV6
+ snprintf(ident_request,127,"%d,%d\r\n",ntohs(sock_them.sin6_port),ntohs(sock_us.sin6_port));
+#else
+ snprintf(ident_request,127,"%d,%d\r\n",ntohs(sock_them.sin_port),ntohs(sock_us.sin_port));
+#endif
+ this->Write(ident_request);
+ Instance->Log(DEBUG,"Sent ident request, waiting for reply");
+ return true;
+ }
+ }
+ else
+ {
+ return true;
+ }