@@ 220,6 220,15 @@ static char *terminate_str(char *out, si
return out;
}
+#define SET(cond, expr) \
+ do { \
+ if (cond) { \
+ ret = (expr); \
+ if (ret) \
+ goto err; \
+ } \
+ } while (0)
+
static int log_qso(struct xlua_state *lua, struct message *msg, const void *raw,
size_t rawlen)
{
@@ 244,97 253,90 @@ static int log_qso(struct xlua_state *lu
qso->start = msg->t5.timeon;
qso->end = msg->t5.timeoff;
- if (msg->t5.comment.len) {
- ret = qso_set_comment_str(qso,
- STR_DUP_LEN(msg->t5.comment.ptr,
- msg->t5.comment.len));
+ SET(msg->t5.comment.len,
+ qso_set_comment_str(qso,
+ STR_DUP_LEN(msg->t5.comment.ptr,
+ msg->t5.comment.len)));
+
+ /* QSO side - tx */
+ SET(msg->t5.my_call.len,
+ qso_set_station_call(qso_get_tx_side(qso),
+ terminate_str(tmp, sizeof(tmp),
+ msg->t5.my_call.ptr,
+ msg->t5.my_call.len)));
+ SET(msg->t5.op_call.len,
+ qso_set_operator_call(qso_get_tx_side(qso),
+ terminate_str(tmp, sizeof(tmp),
+ msg->t5.op_call.ptr,
+ msg->t5.op_call.len)));
+ SET(msg->t5.tx_freq != 0,
+ qso_set_freq_val(qso_get_tx_side(qso),
+ VAL_ALLOC_INT(msg->t5.tx_freq)));
+ SET(msg->t5.my_grid.len,
+ qso_set_grid(qso_get_tx_side(qso),
+ terminate_str(tmp, sizeof(tmp),
+ msg->t5.my_grid.ptr,
+ msg->t5.my_grid.len)));
+ SET(msg->t5.tx_power.len,
+ qso_set_power_user(qso_get_tx_side(qso),
+ terminate_str(tmp, sizeof(tmp),
+ msg->t5.tx_power.ptr,
+ msg->t5.tx_power.len)));
+ SET(msg->t5.mode.len,
+ qso_set_mode(qso_get_tx_side(qso),
+ terminate_str(tmp, sizeof(tmp),
+ msg->t5.mode.ptr,
+ msg->t5.mode.len)));
+ SET(msg->t5.rsts.len,
+ qso_set_rst(qso_get_tx_side(qso),
+ terminate_str(tmp, sizeof(tmp),
+ msg->t5.rsts.ptr,
+ msg->t5.rsts.len)));
+ if (msg->t5.exch_sent.len) {
+ /* stash it in additional data for now */
+ ret = nvl_set_str(qso->additional, "wsjtx-exch-sent",
+ STR_DUP_LEN(msg->t5.exch_sent.ptr,
+ msg->t5.exch_sent.len));
if (ret)
goto err;
}
- /* QSO side - tx */
- ret = qso_set_station_call(qso_get_tx_side(qso),
- terminate_str(tmp, sizeof(tmp),
- msg->t5.my_call.ptr,
- msg->t5.my_call.len));
- if (ret)
- goto err;
- ret = qso_set_operator_call(qso_get_tx_side(qso),
- terminate_str(tmp, sizeof(tmp),
- msg->t5.op_call.ptr,
- msg->t5.op_call.len));
- if (ret)
- goto err;
- ASSERT3U(msg->t5.tx_freq, !=, 0);
- ret = qso_set_freq_val(qso_get_tx_side(qso),
- VAL_ALLOC_INT(msg->t5.tx_freq));
- if (ret)
- goto err;
- ret = qso_set_grid(qso_get_tx_side(qso),
- terminate_str(tmp, sizeof(tmp),
- msg->t5.my_grid.ptr,
- msg->t5.my_grid.len));
- if (ret)
- goto err;
- if (msg->t5.tx_power.len) {
- ret = qso_set_power_user(qso_get_tx_side(qso),
- terminate_str(tmp, sizeof(tmp),
- msg->t5.tx_power.ptr,
- msg->t5.tx_power.len));
+ /* QSO side - rx */
+ SET(msg->t5.dx_call.len,
+ qso_set_station_call(qso_get_rx_side(qso),
+ terminate_str(tmp, sizeof(tmp),
+ msg->t5.dx_call.ptr,
+ msg->t5.dx_call.len)));
+ /*
+ * We don't know the exact rx frequency, it's not part of the packet
+ * and the template has only the ~3kHz base frequency.
+ */
+ qso_clear_freq(qso_get_rx_side(qso));
+ SET(msg->t5.dx_grid.len,
+ qso_set_grid(qso_get_rx_side(qso),
+ terminate_str(tmp, sizeof(tmp),
+ msg->t5.dx_grid.ptr,
+ msg->t5.dx_grid.len)));
+ SET(msg->t5.mode.len,
+ qso_set_mode_val(qso_get_rx_side(qso),
+ qso_get_mode_val(qso_get_tx_side(qso))));
+ SET(msg->t5.rstr.len,
+ qso_set_rst(qso_get_rx_side(qso),
+ terminate_str(tmp, sizeof(tmp),
+ msg->t5.rstr.ptr,
+ msg->t5.rstr.len)));
+ SET(msg->t5.name.len,
+ qso_set_name_str(qso_get_rx_side(qso),
+ STR_DUP_LEN(msg->t5.name.ptr,
+ msg->t5.name.len)));
+ if (msg->t5.exch_recv.len) {
+ /* stash it in additional data for now */
+ ret = nvl_set_str(qso->additional, "wsjtx-exch-recv",
+ STR_DUP_LEN(msg->t5.exch_recv.ptr,
+ msg->t5.exch_recv.len));
if (ret)
goto err;
}
- ret = qso_set_mode(qso_get_tx_side(qso),
- terminate_str(tmp, sizeof(tmp),
- msg->t5.mode.ptr,
- msg->t5.mode.len));
- if (ret)
- goto err;
- if (msg->t5.rsts.len) {
- ret = qso_set_rst(qso_get_tx_side(qso),
- terminate_str(tmp, sizeof(tmp),
- msg->t5.rsts.ptr,
- msg->t5.rsts.len));
- if (ret)
- goto err;
- }
- /* TODO: set exchange sent */
-
- /* QSO side - rx */
- ret = qso_set_station_call(qso_get_rx_side(qso),
- terminate_str(tmp, sizeof(tmp),
- msg->t5.dx_call.ptr,
- msg->t5.dx_call.len));
- if (ret)
- goto err;
- if (msg->t5.dx_grid.len) {
- ret = qso_set_grid(qso_get_rx_side(qso),
- terminate_str(tmp, sizeof(tmp),
- msg->t5.dx_grid.ptr,
- msg->t5.dx_grid.len));
- if (ret)
- goto err;
- }
- ret = qso_set_mode_val(qso_get_rx_side(qso),
- qso_get_mode_val(qso_get_tx_side(qso)));
- if (ret)
- goto err;
- if (msg->t5.rstr.len) {
- ret = qso_set_rst(qso_get_rx_side(qso),
- terminate_str(tmp, sizeof(tmp),
- msg->t5.rstr.ptr,
- msg->t5.rstr.len));
- if (ret)
- goto err;
- }
- if (msg->t5.name.len) {
- ret = qso_set_name_str(qso_get_rx_side(qso),
- STR_DUP_LEN(msg->t5.name.ptr,
- msg->t5.name.len));
- if (ret)
- goto err;
- }
- /* TODO: set exchange received */
/* stash the current time & raw message in an additional field */
ret = nvl_set_int(qso->additional, "wsjtx-import-time", gettime());
@@ 362,6 364,8 @@ err:
return ret;
}
+#undef SET
+
static void wsjtx_process(const union xsockaddr *addr, size_t addrlen,
void *buf, size_t len, void *arg)
{