uint8_t calling_type;
struct tevent_req *req_139;
struct tevent_req *req_445;
+ struct tevent_req *req_5445;
+ struct smb_direct_transport *smb_direct;
int sock;
uint16_t port;
};
static void smbsock_connect_connected(struct tevent_req *subreq);
static void smbsock_connect_do_139(struct tevent_req *subreq);
+struct smb_direct_transport *smb_direct_transport_create(TALLOC_CTX *mem_ctx);
+struct tevent_req *smb_direct_rdma_connect_send(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct smb_direct_transport *transport,
+ const struct sockaddr_storage *addr,
+ struct tsocket_address *local_addr,
+ struct tsocket_address *remote_addr);
+NTSTATUS smb_transport_direct_rdma_connect_recv(struct tevent_req *req);
+
struct tevent_req *smbsock_connect_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
const struct sockaddr_storage *addr,
req = tevent_req_create(mem_ctx, &state, struct smbsock_connect_state);
if (req == NULL) {
- return NULL;
+ return NULL;
}
state->ev = ev;
state->addr = addr;
* port==0, try both
*/
+ state->smb_direct = smb_direct_transport_create(state);
+ state->req_5445 = smb_direct_rdma_connect_send(state, ev, state->smb_direct,
+ addr, NULL, NULL);
+ if (tevent_req_nomem(state->req_5445, req)) {
+ return tevent_req_post(req, ev);
+ }
+ tevent_req_set_callback(state->req_5445, smbsock_connect_connected,
+ req);
+
state->req_445 = open_socket_out_send(state, ev, addr, TCP_SMB_PORT, 5000);
if (tevent_req_nomem(state->req_445, req)) {
return tevent_req_post(req, ev);
subreq, struct tevent_req);
struct smbsock_connect_state *state = tevent_req_data(
req, struct smbsock_connect_state);
- struct tevent_req *unfinished_req;
NTSTATUS status;
- if (subreq == state->req_445) {
+ if (subreq == state->req_5445) {
+
+ status = smb_transport_direct_rdma_connect_recv(subreq);
+ TALLOC_FREE(state->req_5445);
+ TALLOC_FREE(state->smb_direct);
+ state->sock = -1;
+ state->port = 5445;
+ status = NT_STATUS_NOT_IMPLEMENTED;
+
+ } else if (subreq == state->req_445) {
status = open_socket_out_recv(subreq, &state->sock);
TALLOC_FREE(state->req_445);
- unfinished_req = state->req_139;
state->port = TCP_SMB_PORT;
} else if (subreq == state->req_139) {
status = nb_connect_recv(subreq, &state->sock);
TALLOC_FREE(state->req_139);
- unfinished_req = state->req_445;
state->port = NBT_SMB_PORT;
} else {
}
if (NT_STATUS_IS_OK(status)) {
- TALLOC_FREE(unfinished_req);
- state->req_139 = NULL;
- state->req_445 = NULL;
+ TALLOC_FREE(state->req_5445);
+ TALLOC_FREE(state->req_445);
+ TALLOC_FREE(state->req_139);
tevent_req_done(req);
return;
}
- if (unfinished_req == NULL) {
+ if ((state->req_5445 == NULL) &&
+ (state->req_445 == NULL) &&
+ (state->req_139 == NULL))
+ {
/*
- * Both requests failed
+ * All requests failed
*/
tevent_req_nterror(req, status);
return;