int ndmca_data_get_env (struct ndm_session *sess) { struct ndmconn * conn = sess->plumb.data; struct ndm_control_agent *ca = &sess->control_acb; int rc; unsigned int i; ndmp9_pval * d_pv; ndmp9_pval * s_pv; NDMC_WITH_VOID_REQUEST(ndmp9_data_get_env, NDMP9VER) rc = NDMC_CALL(conn); if (rc) return rc; for (i = 0; i < reply->env.env_len; i++) { s_pv = &reply->env.env_val[i]; d_pv = &ca->job.result_env_tab.env[i]; d_pv->name = NDMOS_API_STRDUP (s_pv->name); d_pv->value = NDMOS_API_STRDUP (s_pv->value); } ca->job.result_env_tab.n_env = i; NDMC_FREE_REPLY(); NDMC_ENDWITH return rc; }
int ndmca_tape_read_partial (struct ndm_session *sess, char *buf, unsigned count, int *read_count) { struct ndmconn * conn = sess->plumb.tape; int rc; NDMC_WITH(ndmp9_tape_read, NDMP9VER) request->count = count; rc = NDMC_CALL(conn); if (rc == 0) { *read_count = reply->data_in.data_in_len; bcopy (reply->data_in.data_in_val, buf, *read_count); } else { rc = reply->error; } NDMC_FREE_REPLY(); NDMC_ENDWITH return rc; }
int ndmca_test_tape_read_2cnt (struct ndm_session *sess, ndmp9_error expect_err, char *buf, unsigned count, unsigned true_count) { struct ndmconn * conn = sess->plumb.tape; int rc; /* close previous test if there is one */ ndmca_test_close (sess); switch (conn->protocol_version) { default: return -1234; #ifndef NDMOS_OPTION_NO_NDMP2 case NDMP2VER: NDMC_WITH(ndmp2_tape_read, NDMP2VER) request->count = count; rc = NDMTEST_CALL(conn); if (rc == 0 && expect_err == NDMP9_NO_ERR) { if (reply->data_in.data_in_len == true_count) { bcopy (reply->data_in.data_in_val, buf, true_count); } else { rc = -1; } } NDMC_FREE_REPLY(); NDMC_ENDWITH break; #endif /* !NDMOS_OPTION_NO_NDMP2 */ #ifndef NDMOS_OPTION_NO_NDMP3 case NDMP3VER: NDMC_WITH(ndmp3_tape_read, NDMP3VER) request->count = count; rc = NDMTEST_CALL(conn); if (rc == 0 && expect_err == NDMP9_NO_ERR) { if (reply->data_in.data_in_len == true_count) { bcopy (reply->data_in.data_in_val, buf, true_count); } else { rc = -1; } } NDMC_FREE_REPLY(); NDMC_ENDWITH break; #endif /* !NDMOS_OPTION_NO_NDMP3 */ #ifndef NDMOS_OPTION_NO_NDMP4 case NDMP4VER: NDMC_WITH(ndmp4_tape_read, NDMP4VER) request->count = count; rc = NDMTEST_CALL(conn); if (rc == 0 && expect_err == NDMP9_NO_ERR) { if (reply->data_in.data_in_len == true_count) { bcopy (reply->data_in.data_in_val, buf, true_count); } else { rc = -1; } } NDMC_FREE_REPLY(); NDMC_ENDWITH break; #endif /* !NDMOS_OPTION_NO_NDMP4 */ } return rc; }
int ndmca_test_query_conn_types(struct ndm_session* sess, struct ndmconn* ref_conn) { struct ndmconn* conn = ref_conn; struct ndm_control_agent* ca = sess->control_acb; int rc; unsigned int i; switch (conn->protocol_version) { default: return -1234; #ifndef NDMOS_OPTION_NO_NDMP2 case NDMP2VER: NDMC_WITH_VOID_REQUEST(ndmp2_config_get_mover_type, NDMP2VER) rc = NDMC_CALL(conn); if (rc) { ndmalogf(sess, "Test", 1, "GET_MOVER_TYPE failed"); return rc; } for (i = 0; i < reply->methods.methods_len; i++) { switch (reply->methods.methods_val[i]) { case NDMP2_ADDR_LOCAL: ca->has_local_addr = 1; break; case NDMP2_ADDR_TCP: ca->has_tcp_addr = 1; break; default: break; } } NDMC_FREE_REPLY(); NDMC_ENDWITH break; #endif /* !NDMOS_OPTION_NO_NDMP2 */ #ifndef NDMOS_OPTION_NO_NDMP3 case NDMP3VER: NDMC_WITH_VOID_REQUEST(ndmp3_config_get_connection_type, NDMP3VER) rc = NDMC_CALL(conn); if (rc) { ndmalogf(sess, "Test", 1, "GET_CONNECTION_TYPE failed"); return rc; } for (i = 0; i < reply->addr_types.addr_types_len; i++) { switch (reply->addr_types.addr_types_val[i]) { case NDMP3_ADDR_LOCAL: ca->has_local_addr = 1; break; case NDMP3_ADDR_TCP: ca->has_tcp_addr = 1; break; default: break; } } NDMC_FREE_REPLY(); NDMC_ENDWITH break; #endif /* !NDMOS_OPTION_NO_NDMP3 */ #ifndef NDMOS_OPTION_NO_NDMP4 case NDMP4VER: NDMC_WITH_VOID_REQUEST(ndmp4_config_get_connection_type, NDMP4VER) rc = NDMC_CALL(conn); if (rc) { ndmalogf(sess, "Test", 1, "GET_CONNECTION_TYPE failed"); return rc; } for (i = 0; i < reply->addr_types.addr_types_len; i++) { switch (reply->addr_types.addr_types_val[i]) { case NDMP4_ADDR_LOCAL: ca->has_local_addr = 1; break; case NDMP4_ADDR_TCP: ca->has_tcp_addr = 1; break; default: break; } } NDMC_FREE_REPLY(); NDMC_ENDWITH break; #endif /* !NDMOS_OPTION_NO_NDMP4 */ } return 0; }