P2P: Share code for p2p_connect/authorize channel preparation
authorJouni Malinen <jouni.malinen@atheros.com>
Thu, 14 Oct 2010 09:45:15 +0000 (12:45 +0300)
committerJouni Malinen <j@w1.fi>
Thu, 14 Oct 2010 09:45:15 +0000 (12:45 +0300)
src/p2p/p2p.c

index e8a2add..122c121 100644 (file)
@@ -797,20 +797,8 @@ void p2p_stop_find(struct p2p_data *p2p)
 }
 
 
-int p2p_connect(struct p2p_data *p2p, const u8 *peer_addr,
-               enum p2p_wps_method wps_method,
-               int go_intent, const u8 *own_interface_addr,
-               unsigned int force_freq, int persistent_group)
+static int p2p_prepare_channel(struct p2p_data *p2p, unsigned int force_freq)
 {
-       struct p2p_device *dev;
-
-       wpa_msg(p2p->cfg->msg_ctx, MSG_DEBUG,
-               "P2P: Request to start group negotiation - peer=" MACSTR
-               "  GO Intent=%d  Intended Interface Address=" MACSTR
-               " wps_method=%d persistent_group=%d",
-               MAC2STR(peer_addr), go_intent, MAC2STR(own_interface_addr),
-               wps_method, persistent_group);
-
        if (force_freq) {
                u8 op_reg_class, op_channel;
                if (p2p_freq_to_channel(p2p->cfg->country, force_freq,
@@ -846,6 +834,27 @@ int p2p_connect(struct p2p_data *p2p, const u8 *peer_addr,
                p2p->op_reg_class, p2p->op_channel,
                force_freq ? " (forced)" : "");
 
+       return 0;
+}
+
+
+int p2p_connect(struct p2p_data *p2p, const u8 *peer_addr,
+               enum p2p_wps_method wps_method,
+               int go_intent, const u8 *own_interface_addr,
+               unsigned int force_freq, int persistent_group)
+{
+       struct p2p_device *dev;
+
+       wpa_msg(p2p->cfg->msg_ctx, MSG_DEBUG,
+               "P2P: Request to start group negotiation - peer=" MACSTR
+               "  GO Intent=%d  Intended Interface Address=" MACSTR
+               " wps_method=%d persistent_group=%d",
+               MAC2STR(peer_addr), go_intent, MAC2STR(own_interface_addr),
+               wps_method, persistent_group);
+
+       if (p2p_prepare_channel(p2p, force_freq) < 0)
+               return -1;
+
        dev = p2p_get_device(p2p, peer_addr);
        if (dev == NULL || (dev->flags & P2P_DEV_PROBE_REQ_ONLY)) {
                wpa_msg(p2p->cfg->msg_ctx, MSG_DEBUG,
@@ -928,40 +937,8 @@ int p2p_authorize(struct p2p_data *p2p, const u8 *peer_addr,
                MAC2STR(peer_addr), go_intent, MAC2STR(own_interface_addr),
                wps_method, persistent_group);
 
-       if (force_freq) {
-               u8 op_reg_class, op_channel;
-               if (p2p_freq_to_channel(p2p->cfg->country, force_freq,
-                                       &op_reg_class, &op_channel) < 0) {
-                       wpa_msg(p2p->cfg->msg_ctx, MSG_DEBUG,
-                               "P2P: Unsupported frequency %u MHz",
-                               force_freq);
-                       return -1;
-               }
-               if (!p2p_channels_includes(&p2p->cfg->channels, op_reg_class,
-                                          op_channel)) {
-                       wpa_msg(p2p->cfg->msg_ctx, MSG_DEBUG,
-                               "P2P: Frequency %u MHz (oper_class %u "
-                               "channel %u) not allowed for P2P",
-                               force_freq, op_reg_class, op_channel);
-                       return -1;
-               }
-               p2p->op_reg_class = op_reg_class;
-               p2p->op_channel = op_channel;
-               p2p->channels.reg_classes = 1;
-               p2p->channels.reg_class[0].channels = 1;
-               p2p->channels.reg_class[0].reg_class = p2p->op_reg_class;
-               p2p->channels.reg_class[0].channel[0] = p2p->op_channel;
-       } else {
-               p2p->op_reg_class = p2p->cfg->op_reg_class;
-               p2p->op_channel = p2p->cfg->op_channel;
-               os_memcpy(&p2p->channels, &p2p->cfg->channels,
-                         sizeof(struct p2p_channels));
-       }
-       wpa_msg(p2p->cfg->msg_ctx, MSG_DEBUG,
-               "P2P: Own preference for operation channel: "
-               "Regulatory Class %u Channel %u%s",
-               p2p->op_reg_class, p2p->op_channel,
-               force_freq ? " (forced)" : "");
+       if (p2p_prepare_channel(p2p, force_freq) < 0)
+               return -1;
 
        dev = p2p_get_device(p2p, peer_addr);
        if (dev == NULL) {