Exemplo n.º 1
0
func (f *pushDatabaseOpts) AddDeliveryPointToService(service string,
	subscriber string,
	delivery_point *push.DeliveryPoint) (*push.PushServiceProvider, error) {
	if delivery_point == nil {
		return nil, nil
	}
	if len(delivery_point.Name()) == 0 {
		return nil, errors.New("InvalidDeliveryPoint")
	}
	f.dblock.Lock()
	defer f.dblock.Unlock()
	pspnames, err := f.db.GetPushServiceProvidersByService(service)
	if err != nil {
		return nil, fmt.Errorf("Cannot list services for %s: %v", service, err)
	}
	if pspnames == nil {
		return nil, errors.New(fmt.Sprintf("Cannot Find Service %s", service))
	}

	for _, pspname := range pspnames {
		psp, e := f.db.GetPushServiceProvider(pspname)
		if e != nil {
			return nil, fmt.Errorf("Failed to get information for psp %s: %v", pspname, e)
		}
		if psp == nil {
			continue
		}
		if psp.PushServiceName() == delivery_point.PushServiceName() {
			err = f.db.SetDeliveryPoint(delivery_point)
			if err != nil {
				return nil, fmt.Errorf("Failed to save new info for delivery point: %v", err)
			}
			err = f.db.AddDeliveryPointToServiceSubscriber(service, subscriber, delivery_point.Name())
			if err != nil {
				return nil, fmt.Errorf("Failed to add delivery point to subscriber: %v", err)
			}
			err = f.db.SetPushServiceProviderOfServiceDeliveryPoint(service, delivery_point.Name(), psp.Name())
			if err != nil {
				return nil, fmt.Errorf("Failed to set psp of delivery point: %v", err)
			}
			return psp, nil
		}
	}
	return nil, errors.New(fmt.Sprintf("Cannot Find Push Service Provider with Type %s", delivery_point.PushServiceName()))
}