}
return NULL;
}
+
+bool smtp_params_rcpt_equals(const struct smtp_params_rcpt *params1,
+ const struct smtp_params_rcpt *params2)
+{
+ if (params1 == NULL || params2 == NULL)
+ return (params1 == params2);
+
+ /* NOTIFY: RFC 3461, Section 4.1 */
+ if (params1->notify != params2->notify)
+ return FALSE;
+
+ /* ORCPT: RFC 3461, Section 4.2 */
+ if (null_strcasecmp(params1->orcpt.addr_type,
+ params2->orcpt.addr_type) != 0)
+ return FALSE;
+ if (null_strcasecmp(params1->orcpt.addr_type, "rfc822") == 0) {
+ if (!smtp_address_equals(params1->orcpt.addr,
+ params2->orcpt.addr))
+ return FALSE;
+ } else {
+ if (null_strcmp(params1->orcpt.addr_raw,
+ params2->orcpt.addr_raw) != 0)
+ return FALSE;
+ }
+
+ /* extra parameters */
+ if (array_is_created(¶ms1->extra_params) !=
+ array_is_created(¶ms2->extra_params))
+ return FALSE;
+ if (array_is_created(¶ms1->extra_params)) {
+ const struct smtp_param *param1, *param2;
+
+ if (array_count(¶ms1->extra_params) !=
+ array_count(¶ms2->extra_params))
+ return FALSE;
+ array_foreach(¶ms1->extra_params, param1) {
+ param2 = smtp_params_rcpt_get_extra(params2, param1->keyword);
+ if (param2 == NULL)
+ return FALSE;
+ if (null_strcmp(param1->value, param2->value) != 0)
+ return FALSE;
+ }
+ }
+ return TRUE;
+}